第5章GDI+与图像处理.ppt

上传人:s****8 文档编号:67245479 上传时间:2022-12-24 格式:PPT 页数:58 大小:1.66MB
返回 下载 相关 举报
第5章GDI+与图像处理.ppt_第1页
第1页 / 共58页
第5章GDI+与图像处理.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《第5章GDI+与图像处理.ppt》由会员分享,可在线阅读,更多相关《第5章GDI+与图像处理.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 Windows程序设计(Visual C+版)(Windows Programming Based on Visual C+)江苏大学计算机学院江苏大学计算机学院曹汉清曹汉清E_Mail:第五章 GDI+与图像处理内内容容5.1GDI+概述概述5.2 GDI+绘图基础绘图基础5.3 GDI+字体和文本绘制字体和文本绘制5.4 GDI+图像处理图像处理一、关于一、关于GDI+二、使用二、使用GDI+的一般方法的一般方法三、基本数据结构三、基本数据结构5.1GDI+概述概述GDI:GraphicsDeviceInterface,是程序员编写与设备无关,是程序员编写与设备无关应用程序的基础。应用程

2、序的基础。GDI+在在GDI的基础上进行了改进,添加了很多的基础上进行了改进,添加了很多新功能并优化了其原有功能,是新功能并优化了其原有功能,是WindowsXP操作系统中提供二操作系统中提供二维矢量图形、图像处理及字体格式化的部分,它由一组跟图形处维矢量图形、图像处理及字体格式化的部分,它由一组跟图形处理有关的托管类组成,是理有关的托管类组成,是.NETFramework的组成部分。的组成部分。一、关于一、关于GDI+GDI+核心命名空间核心命名空间(P232):System:Drawing:提供:提供GDI+基本图形功能。更为高级的功基本图形功能。更为高级的功能在能在System.Draw

3、ing.Drawing2D、System.Drawing.Imaging和和System.Drawing.Text命名空间中提供。命名空间中提供。5.1GDI+概述概述System:Drawing:Drawing2D:提供高级的二维图形处理:提供高级的二维图形处理功能和向量操作功能。功能和向量操作功能。System:Drawing:Imaging:提供高级的:提供高级的GDI+图像处理功图像处理功能能。System:Drawing:Printing:提供与打印相关的服务。通常:提供与打印相关的服务。通常情况下,可以创建情况下,可以创建PrintDocument类的实例、设置描述打印内容类的实例

4、、设置描述打印内容的属性,然后调用的属性,然后调用Print方法进行。方法进行。System:Drawing:Text:提供高级的:提供高级的字体处理功能。用户可字体处理功能。用户可以创建和使用字体集合。以创建和使用字体集合。一、关于一、关于GDI+5.1GDI+概述概述System:Drawing主要包含的类和结构:主要包含的类和结构:Bitmap:用于位图处理。:用于位图处理。Brush:用于区域填充。自己定义画刷格式。(抽象基类):用于区域填充。自己定义画刷格式。(抽象基类)Brushes:采用标准颜色的画笔。:采用标准颜色的画笔。Font:字体处理。可定义特定的文本格式,包括字体、字号

5、:字体处理。可定义特定的文本格式,包括字体、字号和字形属性。和字形属性。Graphics:用于:用于GDI+图形的绘制。图形的绘制。Icon:表示:表示Windows图标图标Image:Bitmap和和Metafile类的抽象基类。类的抽象基类。ImageAnimator:动画处理,包含基于时间帧的图像。:动画处理,包含基于时间帧的图像。Pen:画笔。自己定义画笔格式。:画笔。自己定义画笔格式。Pens:使用标准颜色的画笔。:使用标准颜色的画笔。5.1GDI+概述概述一、关于一、关于GDI+Region:封闭区域处理。可由矩形和由路径构成:封闭区域处理。可由矩形和由路径构成SolidBrush

6、:定义单色画刷。:定义单色画刷。StringFormat:设置文本格式。:设置文本格式。SystemBrushes:系统画刷:系统画刷SystemColors:系统颜色:系统颜色SystemFonts:系统字体:系统字体SystemIcons:系统图标:系统图标SystemPens:系统画笔:系统画笔TextureBrush:纹理画刷。使用图像来填充区域内部。:纹理画刷。使用图像来填充区域内部。5.1GDI+概述概述一、关于一、关于GDI+System:Drawing包含的主要结构:包含的主要结构:CharacterRange:指定字符串内字符位置的范围。:指定字符串内字符位置的范围。Colo

7、r:表示:表示ARGB颜色。颜色。Point:二维平面中的点,:二维平面中的点,X和和Y为整型。为整型。PointF:二维平面中的点,:二维平面中的点,X和和Y为单精度浮点型。为单精度浮点型。Rectangle:矩形。参数为整型。:矩形。参数为整型。RectangleF:矩形。参数为单精度浮点型。:矩形。参数为单精度浮点型。Size:尺寸,有宽度和高度。参数为整型型。:尺寸,有宽度和高度。参数为整型型。SizeF:尺寸,有宽度和高度。参数为单精度浮点型。:尺寸,有宽度和高度。参数为单精度浮点型。5.1GDI+概述概述一、关于一、关于GDI+二、使用二、使用GDI+的一般方法的一般方法使用使用P

8、aint事件。在事件。在Paint事件中,事件数据参数是通过事件中,事件数据参数是通过PaintEventArgs类来传递的。该类有两个重要的属性:一个是类来传递的。该类有两个重要的属性:一个是ClipRectangle,用来获取在其中可以进行绘画的区域大小,另一用来获取在其中可以进行绘画的区域大小,另一个是个是Graphics,它是用于绘画的它是用于绘画的Graphics对象,该对象提供与窗对象,该对象提供与窗体或控件相对应的一种绘图环境。体或控件相对应的一种绘图环境。重载重载OnPaint虚函数:虚函数:protected:virtualvoidOnPaint(System:Windows

9、:Forms:PaintEventArgse)override/在此处添加自己的代码在此处添加自己的代码Form:OnPaint(e);/一定要有一定要有/或在此处添加自己的代码或在此处添加自己的代码5.1GDI+概述概述二、使用二、使用GDI+的一般方法的一般方法调用控件的调用控件的CreateGraphics()成员函数。如在窗体中:成员函数。如在窗体中:Graphicsgr=this-CreateGraphics();如果处理的是如果处理的是Image对象,还可以使用对象,还可以使用Graphics类的静态类的静态成员函数成员函数FromImage,它创建一个,它创建一个Graphics

10、对象并与一个对象并与一个Image对象相关联。对象相关联。BitmaphmapgcnewBitmap();Graphicsgr=Graphics:FromImage(hmap);使用使用Graphics类的类的FromHwnd()静态成员函数,它为指静态成员函数,它为指定的窗口句柄返回新的定的窗口句柄返回新的Graphics。Graphicsgr=Graphics:FromHwnd(this-Handle);5.1GDI+概述概述1.颜色颜色用用Color结构来表示,它表示一个结构来表示,它表示一个ARGB颜色,其中颜色,其中A、R、G、B均是均是Color结构的属性,分别表示结构的属性,分别

11、表示alpha、红、绿、蓝分量红、绿、蓝分量值,它们都是值,它们都是Byte类型,值的范围为类型,值的范围为0255。Color结构中包含许多预定义的颜色,它们使用静态属性来结构中包含许多预定义的颜色,它们使用静态属性来表示,需要通过类名来引用。如:表示,需要通过类名来引用。如:Color:Red表示红色等。表示红色等。除了预定义的颜色外,用户还可以调用除了预定义的颜色外,用户还可以调用Color的静态方法的静态方法FromArgb来创建自定义颜色。该方法共有四种重载类型。来创建自定义颜色。该方法共有四种重载类型。在图形绘制操作中,常常需要使用在图形绘制操作中,常常需要使用Color、Poin

12、t、Size和和Rectangle等简单数据结构。它们都是值类型。等简单数据结构。它们都是值类型。三、基本数据结构三、基本数据结构5.1GDI+概述概述三、基本数据结构三、基本数据结构2.点点Point结构用来表示二维平面中定义的点或一个位置结构用来表示二维平面中定义的点或一个位置(x,y),其属性有其属性有X和和Y,分别表示点的水平坐标和垂直坐标。该结构的构分别表示点的水平坐标和垂直坐标。该结构的构造函数原型如下:造函数原型如下:Point(int32dw);Point(Sizesz);Point(int32x,int32y);其中,其中,dw的低的低16位指定水平位指定水平x坐标,高坐标,

13、高16位指定垂直位指定垂直y坐标。坐标。sz的宽度的宽度Width和高度和高度Height用来指定用来指定Point的的x和和y的值。的值。5.1GDI+概述概述3.尺寸尺寸Size结构常用来表示一个尺寸的大小,其属性有结构常用来表示一个尺寸的大小,其属性有Width和和Height,该结构的构造函数原型如下:,该结构的构造函数原型如下:Size(Pointpt);Size(int32width,int32height);其中,其中,pt的的X和和Y用来指定用来指定Size的的Width和和Height属性值。属性值。4.矩形矩形Rectangle结构用来表示一个矩形的位置和大小,其属性有:结

14、构用来表示一个矩形的位置和大小,其属性有:Width:矩形水平宽度矩形水平宽度Height:矩形垂直高度矩形垂直高度X、Y:矩形左上角的矩形左上角的x,y坐标坐标三、基本数据结构三、基本数据结构5.1GDI+概述概述4.矩形矩形Location:矩形左上角的:矩形左上角的Point位置位置Left:矩形左边的:矩形左边的x坐标坐标Right:矩形右边的:矩形右边的x坐标坐标Top:矩形上边的:矩形上边的y坐标坐标Bottom:矩形下边的:矩形下边的y坐标坐标Rectangle的构造函数原型如下:的构造函数原型如下:Rectangle(Pointlocation,Sizesize);Rectan

15、gle(int32x,int32y,int32width,int32height);其中,其中,location或或x、y用来指定矩形左上角的位置,用来指定矩形左上角的位置,width和和height分别指定矩形的宽度和高度。分别指定矩形的宽度和高度。5.基本运算符操作基本运算符操作Point、Size和和Rectangle重载了常用的运算符操作,如重载了常用的运算符操作,如Point和和Size结构的结构的+、-、=、!=操作,操作,Rectangle结构的结构的=、!=操作等。操作等。5.1GDI+概述概述5.2 GDI+绘图基础绘图基础一、坐标空间及其相关属性一、坐标空间及其相关属性二、

16、画笔二、画笔三、画刷三、画刷四、基本绘图函数四、基本绘图函数5.2 GDI+绘图基础绘图基础1.世界坐标系、设备坐标系和页面坐标系世界坐标系、设备坐标系和页面坐标系世界坐标系:用户坐标系,是进行图形输入输出所使用的一世界坐标系:用户坐标系,是进行图形输入输出所使用的一种与设备无关的笛卡尔坐标系。默认时使用像素为单位种与设备无关的笛卡尔坐标系。默认时使用像素为单位设备坐标系:在显示、打印等设备上进行图形绘制时所使用设备坐标系:在显示、打印等设备上进行图形绘制时所使用的坐标系,度量单位为像素。左上角为原点。的坐标系,度量单位为像素。左上角为原点。页面坐标系:进行图形绘制时所采用的坐标系。默认时使用

17、页面坐标系:进行图形绘制时所采用的坐标系。默认时使用像素为单位、左上角为原点像素为单位、左上角为原点,这时,设备坐标和页面坐标是一致,这时,设备坐标和页面坐标是一致的。的。一、坐标空间及其相关属性一、坐标空间及其相关属性5.2 GDI+绘图基础绘图基础2.页面坐标属性的设置页面坐标属性的设置PageUnit属性用来设置和获取页坐标的度量单位。它通常可属性用来设置和获取页坐标的度量单位。它通常可以有下列的以有下列的GraphicsUnit枚举值:枚举值:Display:将显示设备所采用的单位作为度量单位。通常,视:将显示设备所采用的单位作为度量单位。通常,视频显示使用的单位是像素;打印机使用的单

18、位是频显示使用的单位是像素;打印机使用的单位是1/100英寸。英寸。Pixel:以像素为度量单位。:以像素为度量单位。Point:将打印机点(:将打印机点(1/72英寸)指定为度量单位。英寸)指定为度量单位。Inch:将英寸指定为度量单位。:将英寸指定为度量单位。Document:将文档单位(:将文档单位(1/300英寸)指定为度量单位。英寸)指定为度量单位。Millimeter:将毫米指定为度量单位。:将毫米指定为度量单位。World:将世界坐标系单位指定为度量单位。:将世界坐标系单位指定为度量单位。一、坐标空间及其相关属性一、坐标空间及其相关属性5.2 GDI+绘图基础绘图基础2.页面坐标

19、属性的设置页面坐标属性的设置PageScale属性用来获取或设置相对于页面坐标的绘图比例。属性用来获取或设置相对于页面坐标的绘图比例。原点位置设置:原点位置设置:TranslateTransform一、坐标空间及其相关属性一、坐标空间及其相关属性二、画笔二、画笔(P234)1.使用使用Pen创建画笔创建画笔使用构造函数(使用构造函数(4个)进行:个)进行:PenpPen=gcnewPen(Color:Red);/创建一红色画笔创建一红色画笔PenpPen=gcnewPen(Color:Blue,4);/蓝色、宽为蓝色、宽为4的画笔的画笔画笔也可直接用画刷来创建。画笔也可直接用画刷来创建。5.2

20、 GDI+绘图基础绘图基础二、画笔二、画笔2.画笔属性画笔属性Width属性用来设置或获取线宽的;属性用来设置或获取线宽的;DashStyle用来获取或设置指定线型表用来获取或设置指定线型表8-4StartCap和和EndCap用来获取或设置直线的首末两端的线帽类用来获取或设置直线的首末两端的线帽类型,表型,表8-2。LineJoin获取或设置连续两条直线连接处的连接头样式获取或设置连续两条直线连接处的连接头样式3.自定义画笔自定义画笔如果如果DashStyle中定义的线型不能满足实际需求,可通过中定义的线型不能满足实际需求,可通过Pen类的类的DashPattern属性来设置,这时须将属性来

21、设置,这时须将DashStyle属性设置为属性设置为DashStyle:Custom。DashPattern可用来获取或设置自定义的短可用来获取或设置自定义的短划线和空白区域的数组。划线和空白区域的数组。3.自定义画笔自定义画笔public:propertyarrayDashPatternarrayget();voidset(arrayvalue);DashPattern属性数组中的第一个元素是所设置的短划线的长属性数组中的第一个元素是所设置的短划线的长度,第二个元素为所设置的空白区域的长度,第三个元素又是所度,第二个元素为所设置的空白区域的长度,第三个元素又是所设置的短划线的长度,依此类推。

22、虚线图案中每个短划线和空白设置的短划线的长度,依此类推。虚线图案中每个短划线和空白区域的长度是数组中的元素值与区域的长度是数组中的元素值与Pen宽度的乘积。宽度的乘积。5.2 GDI+绘图基础绘图基础二、画笔二、画笔OnPaint中添加:中添加:GraphicspGH=e-Graphics;pGH-PageUnit=GraphicsUnit:Millimeter;PenpPen=gcnewPen(Color:Black,1.5);/画粗实线圆,线宽为画粗实线圆,线宽为1.5mmpGH-DrawArc(pPen,10,10,40,40,0,360);arraydashVals=30,2,2,2;

23、/分别表示分别表示短划短划线长度、线长度、间隔间隔长度长度、短划短划线线长长度、度、间隔间隔长度长度pPen-DashStyle=Drawing2D:DashStyle:Custom;pPen-DashPattern=dashVals;pPen-Width=0.5;/在工程上,细线线宽是粗线线宽的在工程上,细线线宽是粗线线宽的/3,为为0.5mmpGH-DrawLine(pPen,5,30,55,30);/画水平点划线画水平点划线pGH-DrawLine(pPen,30,5,30,55);/画垂直点划线画垂直点划线4.使用标准画笔使用标准画笔Pens和系统画笔和系统画笔SystemPensGD

24、I+中,中,Pens类包含了定义标准颜色的静态属性,可直接引类包含了定义标准颜色的静态属性,可直接引用,例如:用,例如:pGH-DrawLine(Pens:Black,30,5,30,55);除此之外,还可以使用除此之外,还可以使用SystemPens类来指定一个类来指定一个Windows标标准界面颜色画笔来绘制图形,宽度为准界面颜色画笔来绘制图形,宽度为1个像素个像素。例如:。例如:pGH-DrawLine(SystemPens:Control,30,5,30,55);5.2 GDI+绘图基础绘图基础二、画笔二、画笔GDI+中,抽象基类中,抽象基类Brush封装了画刷的基本功能。它派生出封装

25、了画刷的基本功能。它派生出Drawing命名空间中的命名空间中的SolidBrush、TextureBrush、Drawing2D命命名空间中的名空间中的HatchBrush、LinearGradientBrush及及PathGradientBrush等类。分别用于单色画刷、纹理画刷、阴影等类。分别用于单色画刷、纹理画刷、阴影画刷、线性渐变画刷及路径渐变画刷。还可以使用标准画刷画刷、线性渐变画刷及路径渐变画刷。还可以使用标准画刷Drawing:Brushes、系统画刷、系统画刷Drawing:SystemBrushes。1.单色画刷单色画刷(SolidBrush)为为SolidBrush类的构

26、造函数指定一个类的构造函数指定一个Color值,就可创建一个值,就可创建一个单色画刷,如:单色画刷,如:SolidBrushpBrush1=gcnewSolidBrush(Color:Blue);SolidBrushpBrush2=gcnewSolidBrush(Color:FromArgb(0,0,255);三、画刷三、画刷(P236)5.2 GDI+绘图基础绘图基础2.纹理画刷纹理画刷(TextureBrush)用指定的用指定的Image图像填充区域内部,其构造函数有图像填充区域内部,其构造函数有8个左右,个左右,常用的参数有常用的参数有Imageimage、RectangledstRec

27、t、RectangleFdstRect、WrapModewrapMode。image为用来填充的纹理图像;为用来填充的纹理图像;dstRect用来指定图像中的某一个区域来构造纹理画刷;用来指定图像中的某一个区域来构造纹理画刷;wrapMode用来指定当纹理或渐变小于所填充的区域时平铺纹理用来指定当纹理或渐变小于所填充的区域时平铺纹理或渐变的方式,其值可以是以下枚举成员之一。或渐变的方式,其值可以是以下枚举成员之一。Clamp:纹理或:纹理或渐变没有平铺;渐变没有平铺;Tile:平铺渐变或纹理;:平铺渐变或纹理;TileFlipX:水平反转纹:水平反转纹理或渐变,然后平铺该纹理或渐变;理或渐变,

28、然后平铺该纹理或渐变;TileFlipY垂直反转纹理或渐垂直反转纹理或渐变,然后平铺该纹理或渐变;变,然后平铺该纹理或渐变;TileFlipXY:水平和垂直反转纹理:水平和垂直反转纹理或渐变,然后平铺该纹理或渐变。或渐变,然后平铺该纹理或渐变。三、画刷三、画刷5.2 GDI+绘图基础绘图基础GraphicspGH=e-Graphics;RectanglercCircle=Rectangle(0,0,100,100);rcCircle.Offset(20,20);Imageimg=this-BackgroundImage;Rectanglerc1=Rectangle(0,0,30,30);rc1

29、.Offset(img-Width/2,img-Height/2);/画出取纹理图像的区域画出取纹理图像的区域pGH-DrawRectangle(Pens:White,rc1);/定义纹理画刷定义纹理画刷System:Drawing:TextureBrushbrush=gcnewSystem:Drawing:TextureBrush(img,rc1);/按默认平铺方式填充按默认平铺方式填充pGH-FillRectangle(brush,rcCircle);pGH-DrawRectangle(Pens:White,rcCircle);/按按Clamp方式填充方式填充rcCircle.Offset

30、(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-DrawRectangle(Pens:White,rcCircle);/按按TileFlipY方式填充方式填

31、充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,rcCircle);pGH-DrawRectangle(Pens:White,rcCircl

32、e);3.阴影画刷阴影画刷(HatchBrush)阴影画刷是一种由阴影样式、前景色和背景色属性构成的画阴影画刷是一种由阴影样式、前景色和背景色属性构成的画刷,通过刷,通过HatchBrush类的构造函数可以直接创建一个阴影画刷。类的构造函数可以直接创建一个阴影画刷。HatchBrush类的构造函数的原型如下:类的构造函数的原型如下:HatchBrush(HatchStylehatchstyle,ColorforeColor);HatchBrush(HatchStylehatchstyle,ColorforeColor,ColorbackColor);hatchstyle:指定可用于:指定可用于

33、HatchBrush对象的不同图案。对象的不同图案。三、画刷三、画刷5.2 GDI+绘图基础绘图基础例:在例:在Paint事件处理函数中添加事件处理函数中添加GraphicspGH=e-Graphics;pGH-TranslateTransform(10,10);/获取获取HatchStyle所有值的名称所有值的名称ArraystyleName=Enum:GetNames(Drawing2D:HatchStyle:typeid);/定义图例和样式名称显示的起点定义图例和样式名称显示的起点Rectanglehatchrect=Rectangle(0,0,100,20);PointFpt;/绘制图

34、例和样式名称绘制图例和样式名称Int32i=0;while(iLength)Objectoitem=styleName-GetValue(i);/将指定字符串转换成将指定字符串转换成HatchStyle枚举对象枚举对象Objectohs=Enum:Parse(Drawing2D:HatchStyle:typeid,oitem-ToString();/将将Object转换成转换成HatchStyle枚举类型枚举类型Drawing2D:HatchStylehs=safe_cast(ohs);Drawing2D:HatchBrushbrush=gcnewDrawing2D:HatchBrush(hs

35、,Color:Black,Color:LightSkyBlue);/构造阴影画刷构造阴影画刷pGH-FillRectangle(brush,hatchrect);/填充矩形填充矩形/绘制样式名称绘制样式名称pt.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,4

36、0);hatchrect.X=0;i+;4.渐变画刷渐变画刷GDI+提供两种渐变画刷:提供两种渐变画刷:LinearGradientBrush(线性渐变)(线性渐变)和和PathGradientBrush(路径渐变画刷)。(路径渐变画刷)。线性渐变:线性渐变:路径渐变:路径渐变:三、画刷三、画刷渐变画刷的创建及属性设置主要通过渐变画刷的创建及属性设置主要通过LinearGradientBrush和和PathGradientBrush类的构造函数进行。类的构造函数进行。5.2 GDI+绘图基础绘图基础四、基本绘图函数四、基本绘图函数(P240)5.2 GDI+绘图基础绘图基础Graphics的的

37、SmoothingMode属性用于指定是否将平滑处理属性用于指定是否将平滑处理(消除锯齿)应用于直线、曲线或已填充区域的边缘。(消除锯齿)应用于直线、曲线或已填充区域的边缘。SmoothingMode:AntiAlias:消除锯齿:消除锯齿;SmoothingMode:Default:不消除锯齿;:不消除锯齿;SmoothingMode:HighQuality:高质量平滑处理,但处理速:高质量平滑处理,但处理速度慢;度慢;SmoothingMode:HighSpeed:高速度平滑处理,但处理质量:高速度平滑处理,但处理质量较低。较低。SmoothingMode:Invalid:指定一个无效模式

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

39、线样条曲线”。最后再添加一个按钮,。最后再添加一个按钮,Text设为设为“清除清除”。设置有关属性。设置有关属性。(3)为)为Form1添加如下私有成员,并为添加如下私有成员,并为Panel控件添加控件添加Paint事件。事件。private:staticArrayListpoints=gcnewArrayList();private:PointptPrev;5.2 GDI+绘图基础绘图基础四、基本绘图函数四、基本绘图函数private:System:Voidpanel1_Paint(System:Objectsender,System:Windows:Forms:PaintEventArgs

40、e)GraphicspGH=e-Graphics;/根据点的个数确定单选按钮是否禁用根据点的个数确定单选按钮是否禁用if(this-points-CountradioButton1-Checked=true;this-radioButton2-Enabled=false;this-radioButton3-Enabled=false;elsethis-radioButton2-Enabled=true;if(this-points-Count=4)this-radioButton3-Enabled=true;/根据点来选择的类型绘制,并绘制各个顶点根据点来选择的类型绘制,并绘制各个顶点if(t

41、his-points-Countpoints-Count=1)Pointpt=safe_cast(this-points0);pGH-FillRectangle(Brushes:DarkBlue,pt.X-2,pt.Y-2,4,4);return;arrayptarray=gcnewarray(this-points-Count);/将集合列表对象添加到该数组中将集合列表对象添加到该数组中for(inti=0;ipoints-Count;i+)ptarrayi=safe_cast(this-pointsi);pGH-FillRectangle(Brushes:DarkBlue,ptarrayi

42、.X-2,ptarrayi.Y-2,4,4);pGH-SmoothingMode=Drawing2D:SmoothingMode:AntiAlias;if(this-radioButton1-Checked)pGH-DrawLines(Pens:Blue,ptarray);elseif(this-radioButton2-Checked)pGH-DrawPolygon(Pens:Blue,ptarray);elseif(this-radioButton3-Checked)pGH-DrawCurve(Pens:Blue,ptarray,1.0);(4)为清除按钮添加为清除按钮添加Click事件处

43、理,函数体中代码:事件处理,函数体中代码:this-points-Clear();this-panel1-Invalidate();/强制执行强制执行Paint事件处理函数事件处理函数(5)为各单选按钮添加为各单选按钮添加CheckedChanged事件的共同处理方法事件的共同处理方法On_Checked,在其中添加下列代码:,在其中添加下列代码:this-panel1-Invalidate();/强制执行强制执行Paint(6)为为Panel控件添加控件添加MouseDown事件处理方法:事件处理方法:private:System:Voidpanel1_MouseDown(System:Ob

44、jectsender,System:Windows:Forms:MouseEventArgse)ptPrev=Point(e-X,e-Y);points-Add(ptPrev);this-panel1-Invalidate();/强制执行强制执行Paint事件事件(7)为为Panel控件添加控件添加MouseMove事件处理方法,并添加下列事件处理方法,并添加下列代码:代码:5.2 GDI+绘图基础绘图基础四、基本绘图函数四、基本绘图函数private:System:Voidpanel1_MouseMove(System:Objectsender,System:Windows:Forms:Mo

45、useEventArgs e)if(this-points-Countpoints-Count-1;Pointpt=safe_cast(pointsnIndex);Graphicsg=this-panel1-CreateGraphics();/创建与创建与panel1控件相关联的控件相关联的Graphicsg-DrawLine(gcnewPen(panel1-BackColor),pt,ptPrev);ptPrev=Point(e-X,e-Y);g-DrawLine(Pens:Gray,pt,ptPrev);5.2 GDI+绘图基础绘图基础四、基本绘图函数四、基本绘图函数(8)编译运行:)编译

46、运行:GDI+和和GDI提供多个类用于在提供多个类用于在Windows窗体上绘制文本。窗体上绘制文本。如如Graphics类的类的DrawString,它允许指定文本的各种特征,如如,它允许指定文本的各种特征,如如位置、边框、字体和格式等。也可以使用位置、边框、字体和格式等。也可以使用TextRenderer类提供的类提供的DrawText和和MeasureText静态方法绘制和测量文本。静态方法绘制和测量文本。5.3 GDI+字体和文本绘制字体和文本绘制绘制文本之前,一般要构造一个绘制文本之前,一般要构造一个FontFamily对象和一个对象和一个Font对象。对象。FontFamily对象

47、指定字样(例如对象指定字样(例如Arial),而),而Font对象指对象指定字号、字形和单位等(也可直接使用定字号、字形和单位等(也可直接使用Font构造函数直接构造构造函数直接构造FontFamily对象)。涉及文本操作的其他类还包括对象)。涉及文本操作的其他类还包括StringFormat(封装文本布局信息、显示操作等功能)和(封装文本布局信息、显示操作等功能)和TextFormatFlags(指定文本字符串的显示和布局信息)(指定文本字符串的显示和布局信息)。提交给用户进行字体设置可使用通用字体对话框类或控件。提交给用户进行字体设置可使用通用字体对话框类或控件。可以用各种图形文件格式(可

48、以用各种图形文件格式(BMP、GIF、JPEG、EXIF、PNG、TIFF、WMF和和ICON)构造)构造Bitmap对象。对象。5.4 GDI+图像处理图像处理使用使用GDI+的的Image类和类和Bitmap类可以轻松地处理图像。类可以轻松地处理图像。System.Drawing.Imaging命名空间提供更为高级图像处理功能命名空间提供更为高级图像处理功能DrawImage是是GDI+的的Graphics类显示图像的核心方法,它类显示图像的核心方法,它的重载形式有的重载形式有30个。在其中可以指定要显示的图像、显示图像的个。在其中可以指定要显示的图像、显示图像的位置、图像填充的矩形区域及

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

50、Image:FromFile(L1.jpg);gr-DrawImage(image,10,10);Rectanglerect=Rectangle(20,10,image-Width,image-Height);gr-DrawImage(image,rect);5.4 GDI+图像处理图像处理二、常用的图像处理操作二、常用的图像处理操作Imaging:Metafilemetafile=gcnewImaging:Metafile(2.emf);gr-DrawImage(metafile,10,image-Height+20);2.图像旋转和拉伸图像旋转和拉伸图像的旋转可以使用图像的旋转可以使用Im

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁