【教学课件】第5章GDI与图像处理.ppt

上传人:小飞机 文档编号:5658923 上传时间:2023-08-06 格式:PPT 页数:56 大小:1.10MB
返回 下载 相关 举报
【教学课件】第5章GDI与图像处理.ppt_第1页
第1页 / 共56页
【教学课件】第5章GDI与图像处理.ppt_第2页
第2页 / 共56页
【教学课件】第5章GDI与图像处理.ppt_第3页
第3页 / 共56页
【教学课件】第5章GDI与图像处理.ppt_第4页
第4页 / 共56页
【教学课件】第5章GDI与图像处理.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《【教学课件】第5章GDI与图像处理.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第5章GDI与图像处理.ppt(56页珍藏版)》请在三一办公上搜索。

1、第五章 GDI+与图像处理,内 容,5.1GDI+概述,5.2 GDI+绘图基础,5.3 GDI+字体和文本绘制,5.4 GDI+图像处理,一、关于GDI+,二、使用GDI+的一般方法,三、基本数据结构,5.1GDI+概述,GDI:Graphics Device Interface,是程序员编写与设备无关应用程序的基础。GDI+在GDI的基础上进行了改进,添加了很多新功能并优化了其原有功能,是Windows XP 操作系统中提供二维矢量图形、图像处理及字体格式化的部分,它由一组跟图形处理有关的托管类组成,是.NET Framework的组成部分。,一、关于GDI+,GDI+核心命名空间:Sys

2、tem:Drawing:提供GDI+基本图形功能。更为高级的功能在、System.Drawing.Imaging 和 System.Drawing.Text 命名空间中提供。,5.1GDI+概述,System:Drawing:Drawing2D:提供高级的二维图形处理功能和向量操作功能。System:Drawing:Imaging:提供高级的 GDI+图像处理功能。System:Drawing:Printing:提供与打印相关的服务。通常情况下,可以创建 PrintDocument 类的实例、设置描述打印内容的属性,然后调用 Print 方法进行。System:Drawing:Text:提供高

3、级的 字体处理功能。用户可以创建和使用字体集合。,一、关于GDI+,5.1GDI+概述,System:Drawing主要包含的类和结构:Bitmap:用于位图处理。Brush:用于区域填充。自己定义画刷格式。(抽象基类)Brushes:采用标准颜色的画笔。Font:字体处理。可定义特定的文本格式,包括字体、字号和字形属性。Graphics:用于GDI+图形的绘制。Icon:表示 Windows 图标Image:Bitmap和Metafile类的抽象基类。ImageAnimator:动画处理,包含基于时间帧的图像。Pen:画笔。自己定义画笔格式。Pens:使用标准颜色的画笔。,5.1GDI+概述

4、,一、关于GDI+,Region:封闭区域处理。可由矩形和由路径构成SolidBrush:定义单色画刷。StringFormat:设置文本格式。SystemBrushes:系统画刷SystemColors:系统颜色SystemFonts:系统字体SystemIcons:系统图标SystemPens:系统画笔TextureBrush:纹理画刷。使用图像来填充区域内部。,5.1GDI+概述,一、关于GDI+,System:Drawing包含的主要结构:CharacterRange:指定字符串内字符位置的范围。Color:表示 ARGB 颜色。Point:二维平面中的点,X和Y为整型。PointF:

5、二维平面中的点,X和Y为单精度浮点型。Rectangle:矩形。参数为整型。RectangleF:矩形。参数为单精度浮点型。Size:尺寸,有宽度和高度。参数为整型型。SizeF:尺寸,有宽度和高度。参数为单精度浮点型。,5.1GDI+概述,一、关于GDI+,二、使用GDI+的一般方法,使用Paint事件。在Paint事件中,事件数据参数是通过PaintEventArgs类来传递的。该类有两个重要的属性:一个是ClipRectangle,用来获取在其中可以进行绘画的区域大小,另一个是Graphics,它是用于绘画的Graphics对象,该对象提供与窗体或控件相对应的一种绘图环境。,重载OnPa

6、int虚函数:protected:virtual void OnPaint(System:Windows:Forms:PaintEventArgs e)override/在此处添加自己的代码 Form:OnPaint(e);/一定要有/或在此处添加自己的代码,5.1GDI+概述,二、使用GDI+的一般方法,调用控件的CreateGraphics()成员函数。如在窗体中:Graphics gr=this-CreateGraphics();如果处理的是Image对象,还可以使用Graphics类的静态成员函数FromImage,它创建一个Graphics对象并与一个Image对象相关联。Bitma

7、p hmapgcnew Bitmap();Graphics gr=Graphics:FromImage(hmap);使用 Graphics类的 FromHwnd()静态成员函数,它为指定的窗口句柄返回新的 Graphics。Graphics gr=Graphics:FromHwnd(this-Handle);,5.1GDI+概述,1.颜色用Color结构来表示,它表示一个ARGB颜色,其中A、R、G、B均是Color结构的属性,分别表示alpha、红、绿、蓝分量值,它们都是Byte类型,值的范围为0255。Color结构中包含许多预定义的颜色,它们使用静态属性来表示,需要通过类名来引用。如:C

8、olor:Red表示红色等。除了预定义的颜色外,用户还可以调用Color的静态方法FromArgb来创建自定义颜色。该方法共有四种重载类型。,在图形绘制操作中,常常需要使用Color、Point、Size和Rectangle 等简单数据结构。它们都是值类型。,三、基本数据结构,5.1GDI+概述,三、基本数据结构,2.点Point结构用来表示二维平面中定义的点或一个位置(x,y),其属性有X和Y,分别表示点的水平坐标和垂直坐标。该结构的构造函数原型如下:Point(int32 dw);Point(Size sz);Point(int32 x,int32 y);其中,dw的低16位指定水平x坐标

9、,高16位指定垂直y坐标。sz的宽度Width和高度Height用来指定Point的x和y的值。,5.1GDI+概述,3.尺寸Size结构常用来表示一个尺寸的大小,其属性有Width和Height,该结构的构造函数原型如下:Size(Point pt);Size(int32 width,int32 height);其中,pt的X和Y用来指定Size的Width和Height属性值。4.矩形Rectangle结构用来表示一个矩形的位置和大小,其属性有:Width:矩形水平宽度 Height:矩形垂直高度X、Y:矩形左上角的x,y坐标,三、基本数据结构,5.1GDI+概述,4.矩形Location

10、:矩形左上角的Point位置Left:矩形左边的x坐标 Right:矩形右边的x坐标Top:矩形上边的y坐标 Bottom:矩形下边的y坐标Rectangle的构造函数原型如下:Rectangle(Point location,Size size);Rectangle(int32 x,int32 y,int32 width,int32 height);其中,location 或x、y用来指定矩形左上角的位置,width和height分别指定矩形的宽度和高度。,5.基本运算符操作Point、Size和Rectangle重载了常用的运算符操作,如Point和Size结构的+、-、=、!=操作,Re

11、ctangle结构的=、!=操作等。,5.1GDI+概述,5.2 GDI+绘图基础,一、坐标空间及其相关属性,二、画笔,三、画刷,四、基本绘图函数,5.2 GDI+绘图基础,1.世界坐标系、设备坐标系和页面坐标系世界坐标系:用户坐标系,是进行图形输入输出所使用的一种与设备无关的笛卡尔坐标系。默认时使用像素为单位设备坐标系:在显示、打印等设备上进行图形绘制时所使用的坐标系,度量单位为像素。左上角为原点。页面坐标系:进行图形绘制时所采用的坐标系。默认时使用像素为单位、左上角为原点,这时,设备坐标和页面坐标是一致的。,一、坐标空间及其相关属性,5.2 GDI+绘图基础,2.页面坐标属性的设置Page

12、Unit属性用来设置和获取页坐标的度量单位。它通常可以有下列的GraphicsUnit枚举值:Display:将显示设备所采用的单位作为度量单位。通常,视频显示使用的单位是像素;打印机使用的单位是 1/100 英寸。Pixel:以像素为度量单位。Point:将打印机点(1/72 英寸)指定为度量单位。Inch:将英寸指定为度量单位。Document:将文档单位(1/300 英寸)指定为度量单位。Millimeter:将毫米指定为度量单位。World:将世界坐标系单位指定为度量单位。,一、坐标空间及其相关属性,5.2 GDI+绘图基础,2.页面坐标属性的设置PageScale属性用来获取或设置相

13、对于页面坐标的绘图比例。原点位置设置:TranslateTransform,一、坐标空间及其相关属性,二、画笔,1.使用Pen创建画笔使用构造函数(4个)进行:Pen pPen=gcnew Pen(Color:Red);/创建一红色画笔Pen pPen=gcnew Pen(Color:Blue,4);/蓝色、宽为4的画笔画笔也可直接用画刷来创建。,5.2 GDI+绘图基础,二、画笔,2.画笔属性Width属性用来设置或获取线宽的;DashStyle用来获取或设置指定线型表7-1StartCap和EndCap用来获取或设置直线的首末两端的线帽类型,表7.2。LineJoin获取或设置连续两条直线

14、连接处的连接头样式 3.自定义画笔如果DashStyle中定义的线型不能满足实际需求,可通过Pen类的DashPattern属性来设置,这时须将DashStyle属性设置为DashStyle:Custom。DashPattern可用来获取或设置自定义的短划线和空白区域的数组。,3.自定义画笔public:property array DashPattern array get();void set(array value);DashPattern属性数组中的第一个元素是所设置的短划线的长度,第二个元素为所设置的空白区域的长度,第三个元素又是所设置的短划线的长度,依此类推。虚线图案中每个短划线和

15、空白区域的长度是数组中的元素值与 Pen 宽度的乘积。,5.2 GDI+绘图基础,二、画笔,OnPaint中添加:Graphics pGH=e-Graphics;pGH-PageUnit=GraphicsUnit:Millimeter;Pen pPen=gcnew Pen(Color:Black,1.5);/画粗实线圆,线宽为1.5mmpGH-DrawArc(pPen,10,10,40,40,0,360);arraydashVals=30,2,2,2;/分别表示短划线长度、间隔长度、短划线长度、间隔长度 pPen-DashStyle=Drawing2D:DashStyle:Custom;pPe

16、n-DashPattern=dashVals;pPen-Width=0.5;/在工程上,细线线宽是粗线线宽的1/3,为0.5mmpGH-DrawLine(pPen,5,30,55,30);/画水平点划线pGH-DrawLine(pPen,30,5,30,55);/画垂直点划线,4.使用标准画笔Pens和系统画笔SystemPensGDI+中,Pens类包含了定义标准颜色的静态属性,可直接引用,例如:pGH-DrawLine(Pens:Black,30,5,30,55);除此之外,还可以使用SystemPens类来指定一个Windows标准界面颜色画笔来绘制图形,宽度为 1 个像素。例如:pGH

17、-DrawLine(SystemPens:Control,30,5,30,55);,5.2 GDI+绘图基础,二、画笔,GDI+中,抽象基类Brush封装了画刷的基本功能。它派生出Drawing命名空间中的SolidBrush、TextureBrush、Drawing2D命名空间中的HatchBrush、LinearGradientBrush及PathGradientBrush等类。分别用于单色画刷、纹理画刷、阴影画刷、线性渐变画刷及路径渐变画刷。还可以使用标准画刷Drawing:Brushes、系统画刷Drawing:SystemBrushes。1.单色画刷(SolidBrush)为Soli

18、dBrush类的构造函数指定一个Color值,就可创建一个单色画刷,如:SolidBrush pBrush1=gcnew SolidBrush(Color:Blue);SolidBrush pBrush2=gcnew SolidBrush(Color:FromArgb(0,0,255);,三、画刷,5.2 GDI+绘图基础,2.纹理画刷(TextureBrush)用指定的Image图像填充区域内部,其构造函数有8个左右,常用的参数有Image image、Rectangle dstRect、RectangleF dstRect、WrapMode wrapMode。image为用来填充的纹理图像

19、;dstRect用来指定图像中的某一个区域来构造纹理画刷;wrapMode用来指定当纹理或渐变小于所填充的区域时平铺纹理或渐变的方式,其值可以是以下枚举成员之一。Clamp:纹理或渐变没有平铺;Tile:平铺渐变或纹理;TileFlipX:水平反转纹理或渐变,然后平铺该纹理或渐变;TileFlipY垂直反转纹理或渐变,然后平铺该纹理或渐变;TileFlipXY:水平和垂直反转纹理或渐变,然后平铺该纹理或渐变。,三、画刷,5.2 GDI+绘图基础,Graphics pGH=e-Graphics;Rectangle rcCircle=Rectangle(0,0,100,100);rcCircle.

20、Offset(20,20);Image img=this-BackgroundImage;Rectangle rc1=Rectangle(0,0,30,30);rc1.Offset(img-Width/2,img-Height/2);/画出取纹理图像的区域pGH-DrawRectangle(Pens:White,rc1);/定义纹理画刷System:Drawing:TextureBrush brush=gcnew System:Drawing:TextureBrush(img,rc1);/按默认平铺方式填充pGH-FillRectangle(brush,rcCircle);pGH-DrawRe

21、ctangle(Pens:White,rcCircle);/按Clamp方式填充 rcCircle.Offset(120,0);brush-WrapMode=Drawing2D:WrapMode:Clamp;pGH-FillRectangle(brush,rcCircle);pGH-DrawRectangle(Pens:White,rcCircle);,/按TileFlipX方式填充rcCircle.Offset(120,0);brush-WrapMode=Drawing2D:WrapMode:TileFlipX;pGH-FillRectangle(brush,rcCircle);pGH-Dr

22、awRectangle(Pens:White,rcCircle);/按TileFlipY方式填充rcCircle.Offset(120,0);brush-WrapMode=Drawing2D:WrapMode:TileFlipY;pGH-FillRectangle(brush,rcCircle);pGH-DrawRectangle(Pens:White,rcCircle);/按TileFlipXY方式填充rcCircle.Offset(120,0);brush-WrapMode=Drawing2D:WrapMode:TileFlipXY;pGH-FillRectangle(brush,rcCi

23、rcle);pGH-DrawRectangle(Pens:White,rcCircle);,3.阴影画刷(HatchBrush)阴影画刷是一种由阴影样式、前景色和背景色属性构成的画刷,通过HatchBrush类的构造函数可以直接创建一个阴影画刷。HatchBrush类的构造函数的原型如下:HatchBrush(HatchStyle hatchstyle,Color foreColor);HatchBrush(HatchStyle hatchstyle,Color foreColor,Color backColor);hatchstyle:指定可用于HatchBrush对象的不同图案。,三、画刷

24、,5.2 GDI+绘图基础,例:在Paint事件处理函数中添加Graphics pGH=e-Graphics;pGH-TranslateTransform(10,10);/获取HatchStyle所有值的名称Array styleName=Enum:GetNames(Drawing2D:HatchStyle:typeid);/定义图例和样式名称显示的起点Rectangle hatchrect=Rectangle(0,0,100,20);PointF pt;/绘制图例和样式名称Int32 i=0;while(iLength)Object oitem=styleName-GetValue(i);/

25、将指定字符串转换成HatchStyle枚举对象Object ohs=Enum:Parse(Drawing2D:HatchStyle:typeid,oitem-ToString();/将Object转换成HatchStyle枚举类型Drawing2D:HatchStyle hs=safe_cast(ohs);,Drawing2D:HatchBrush brush=gcnew Drawing2D:HatchBrush(hs,Color:Black,Color:LightSkyBlue);/构造阴影画刷pGH-FillRectangle(brush,hatchrect);/填充矩形/绘制样式名称pt

26、.X=float(hatchrect.X);pt.Y=float(hatchrect.Bottom);pGH-DrawString(oitem-ToString(),this-Font,Brushes:Black,pt);hatchrect.Offset(130,0);if(hatchrect.Righte-ClipRectangle.Right)hatchrect.Offset(0,40);hatchrect.X=0;i+;,4.渐变画刷GDI+提供两种渐变画刷:LinearGradientBrush(线性渐变)和PathGradientBrush(路径渐变画刷)。,线性渐变:,路径渐变:,

27、三、画刷,渐变画刷的创建及属性设置主要通过LinearGradientBrush 和PathGradientBrush类的构造函数进行。,5.2 GDI+绘图基础,四、基本绘图函数,5.2 GDI+绘图基础,Graphics的SmoothingMode属性用于指定是否将平滑处理(消除锯齿)应用于直线、曲线或已填充区域的边缘。SmoothingMode:AntiAlias:消除锯齿;SmoothingMode:Default:不消除锯齿;SmoothingMode:HighQuality:高质量平滑处理,但处理速度慢;SmoothingMode:HighSpeed:高速度平滑处理,但处理质量较低

28、。SmoothingMode:Invalid:指定一个无效模式;SmoothingMode:None:指定不消除锯齿。,四、基本绘图函数,5.2 GDI+绘图基础,实例:根据鼠标指定的一组点来画出连续折线、封闭多边形和样条曲线。(1)创建一个Windows窗体应用程序项目Win_Curve。(2)为Form1窗体添加一个Panel、一个Group控件。在组框中添加三个单选按钮,Text分别设为“连续折线”、“封闭多边形”和“样条曲线”。最后再添加一个按钮,Text设为“清除”。设置有关属性。(3)为Form1添加如下私有成员,并为Panel控件添加Paint事件。private:static

29、ArrayList points=gcnew ArrayList();private:Point ptPrev;,5.2 GDI+绘图基础,四、基本绘图函数,private:System:Void panel1_Paint(System:Object sender,System:Windows:Forms:PaintEventArgs e)Graphics pGH=e-Graphics;/根据点的个数确定单选按钮是否禁用if(this-points-CountradioButton1-Checked=true;this-radioButton2-Enabled=false;this-radio

30、Button3-Enabled=false;elsethis-radioButton2-Enabled=true;if(this-points-Count=4)this-radioButton3-Enabled=true;,/根据点来选择的类型绘制,并绘制各个顶点if(this-points-Countpoints-Count=1)Point pt=safe_cast(this-points0);pGH-FillRectangle(Brushes:DarkBlue,pt.X-2,pt.Y-2,4,4);return;arrayptarray=gcnew array(this-points-Co

31、unt);/将集合列表对象添加到该数组中for(int i=0;ipoints-Count;i+)ptarrayi=safe_cast(this-pointsi);pGH-FillRectangle(Brushes:DarkBlue,ptarrayi.X-2,ptarrayi.Y-2,4,4);,pGH-SmoothingMode=Drawing2D:SmoothingMode:AntiAlias;if(this-radioButton1-Checked)pGH-DrawLines(Pens:Blue,ptarray);else if(this-radioButton2-Checked)pGH

32、-DrawPolygon(Pens:Blue,ptarray);else if(this-radioButton3-Checked)pGH-DrawCurve(Pens:Blue,ptarray,1.0);,(4)为清除按钮添加Click事件处理,函数体中代码:this-points-Clear();this-panel1-Invalidate();/强制执行Paint事件处理函数,(5)为各单选按钮添加CheckedChanged事件的共同处理方法On_Checked,在其中添加下列代码:this-panel1-Invalidate();/强制执行Paint,(6)为Panel控件添加Mou

33、seDown事件处理方法:private:System:Void panel1_MouseDown(System:Object sender,System:Windows:Forms:MouseEventArgs e)ptPrev=Point(e-X,e-Y);points-Add(ptPrev);this-panel1-Invalidate();/强制执行Paint事件,(7)为Panel控件添加MouseMove事件处理方法,并添加下列代码:,5.2 GDI+绘图基础,四、基本绘图函数,private:System:Void panel1_MouseMove(System:Object s

34、ender,System:Windows:Forms:MouseEventArgs e)if(this-points-Countpoints-Count-1;Point pt=safe_cast(pointsnIndex);Graphics g=this-panel1-CreateGraphics();/创建与panel1控件相关联的Graphicsg-DrawLine(gcnew Pen(panel1-BackColor),pt,ptPrev);ptPrev=Point(e-X,e-Y);g-DrawLine(Pens:Gray,pt,ptPrev);,5.2 GDI+绘图基础,四、基本绘图

35、函数,(8)编译运行:,GDI+和GDI 提供多个类用于在 Windows 窗体上绘制文本。如Graphics 类的 DrawString,它允许指定文本的各种特征,如如位置、边框、字体和格式等。也可以使用 TextRenderer 类提供的 DrawText 和 MeasureText 静态方法绘制和测量文本。,5.3 GDI+字体和文本绘制,绘制文本之前,一般要构造一个FontFamily对象和一个 Font 对象。FontFamily 对象指定字样(例如Arial),而 Font 对象指定字号、字形和单位等(也可直接使用Font构造函数直接构造FontFamily对象)。涉及文本操作的其

36、他类还包括StringFormat(封装文本布局信息、显示操作等功能)和TextFormatFlags(指定文本字符串的显示和布局信息)。,提交给用户进行字体设置可使用通用字体对话框类或控件。,可以用各种图形文件格式(BMP、GIF、JPEG、EXIF、PNG、TIFF、WMF和 ICON)构造 Bitmap 对象。,5.4 GDI+图像处理,使用GDI+的Image类和Bitmap类可以轻松地处理图像。System.Drawing.Imaging 命名空间提供更为高级图像处理功能,DrawImage是GDI+的Graphics类显示图像的核心方法,它的重载形式有30个。在其中可以指定要显示的

37、图像、显示图像的位置、图像填充的矩形区域及显示图像采用的度量单位等。,一、概 述,5.4 GDI+图像处理,二、常用的图像处理操作,1.调用和显示图像文件在GDI+中调用和显示图像文件是非常容易的,一般先通过Image或Bitmap调入一个图像文件构造一个对象,然后调用Graphics:DrawImage方法在指定位置处显示全部或部分图像。Graphics gr=e-Graphics;Image image=Image:FromFile(L1.jpg);gr-DrawImage(image,10,10);Rectangle rect=Rectangle(20,10,image-Width,im

38、age-Height);gr-DrawImage(image,rect);,5.4 GDI+图像处理,二、常用的图像处理操作,Imaging:Metafile metafile=gcnew Imaging:Metafile(2.emf);gr-DrawImage(metafile,10,image-Height+20);,2.图像旋转和拉伸图像的旋转可以使用Image类的RotateFlip方法来实现的,其参数可用来指定图像旋转的类型。另外,也可指定DrawImage中的参数destPoints完成该操作。其第一个点是用来定义新坐标系的原点,第二点用来定义X轴的方法和图像X方向的大小,第三个是

39、用来定义Y轴的方法和图像Y方向的大小。若destPoints定义的新坐标系中两轴方向不垂直,就能达到图像拉伸的效果。,Graphics gr=e-Graphics;Image image=Bitmap:FromFile(Ls.bmp);Rectangle rect=Rectangle(10,10,150,250);gr-DrawImage(image,rect);array pts=Point(2500,10),Point(350,100),Point(200,150);gr-DrawImage(image,pts);,5.4 GDI+图像处理,二、常用的图像处理操作,3.插值模式的使用缩放时

40、使用插值模式可以控制图像质量。Graphics 对象的 InterpolationMode 属性便是为此而设计。该枚举值主要是:,3.插值模式的使用Bicubic:指定双三次插值法。将图像收缩为原始大小的 25%以下时,此模式不适用。Bilinear:指定双线性插值法。将图像收缩为原始大小的 50%以下时,此模式不适用。Default:指定默认模式。High:指定高质量插值法。HighQualityBicubic:指定高质量的双三次插值法。此模式可产生质量最高的转换图像。HighQualityBilinear:指定高质量的双线性插值法。Low:指定低质量插值法。NearestNeighbor:

41、指定最临近插值法。,5.4 GDI+图像处理,二、常用的图像处理操作,4.图片格式的转换使用Image类的Save 方法,可以将图像按指定的格式保存到文件中。,5.4 GDI+图像处理,二、常用的图像处理操作,实例:,5.4 GDI+图像处理,图像显示和保存(1)创建一个Windows窗体应用程序项目Win_Image。(2)在打开的窗体设计器中,为Form1窗体添加一个Label控件和两个按钮。按图设置控件Text及有关属性。(3)为“调入”和“保存”按钮添加Click事件。代码分别为:,private:System:Void button1_Click(System:Object send

42、er,System:EventArgs e)OpenFileDialog pofd=gcnew OpenFileDialog();pofd-Filter=L位图文件(*.bmp)|*.bmp|JPG图像文件(*.jpg)|*.jpg|所有图像文件|*.bmp;*.jpg;*.gif;*.wmf;*.emf;*.ico;*.png;System:Windows:Forms:DialogResult nresult=pofd-ShowDialog();if(nresult!=System:Windows:Forms:DialogResult:OK)return;Image image=Image:

43、FromFile(pofd-FileName);this-label1-Image=image;this-label1-Invalidate();,private:System:Void button2_Click(System:Object sender,System:EventArgs e)SaveFileDialog psfd=gcnew SaveFileDialog();psfd-Filter=L位图文件(*.bmp)|*.bmp|JPG图像文件(*.jpg)|*.jpg|GIF图像文件(*.gif)|*.gif|PNG图像文件(*.png)|*.png;psfd-AddExtensi

44、on=true;/自动添加扩展名if(psfd-ShowDialog()!=System:Windows:Forms:DialogResult:OK)return;Image image=this-label1-Image;switch(psfd-FilterIndex)case 1:image-Save(psfd-FileName,System:Drawing:Imaging:ImageFormat:Bmp);break;,case 2:image-Save(psfd-FileName,System:Drawing:Imaging:ImageFormat:Jpeg);break;case 3

45、:image-Save(psfd-FileName,System:Drawing:Imaging:ImageFormat:Gif);break;case 4:image-Save(psfd-FileName,System:Drawing:Imaging:ImageFormat:Png);break;default:image-Save(psfd-FileName);image=Image:FromFile(psfd-FileName);this-label1-Image=image;this-label1-Invalidate();,(4)为Label控件添加Paint事件。代码为:,if(t

46、his-label1-Image=nullptr)this-button2-Enabled=false;return;if(this-button2-Enabled=false)this-button2-Enabled=true;Graphics pGH=e-Graphics;Image image=this-label1-Image;Rectangle rc=e-ClipRectangle;if(image-WidthHeightrc.Height)return;,/填充控件背景pGH-FillRectangle(Brushes:White,e-ClipRectangle);/图像等比例缩放

47、以适应控件大小float r=float(image-Width)/float(image-Height);int nwidth=int(float(rc.Height)*r);int nheight=int(float(rc.Width)/r);if(nwidthrc.Width)nwidth=rc.Width;elsenheight=rc.Height;/调整绘制的范围rc.Inflate(nwidth-rc.Width)/2,(nheight-rc.Height)/2);pGH-DrawImage(image,rc);,内 容,5.1GDI+概述,5.2 GDI+绘图基础,5.3 GDI+字体和文本绘制,5.4 GDI+图像处理,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号