GDI+绘图入门.pptx_第1页
GDI+绘图入门.pptx_第2页
GDI+绘图入门.pptx_第3页
GDI+绘图入门.pptx_第4页
GDI+绘图入门.pptx_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、声明本文档收集自互联网,版权归原作者所有。因不满有些人用其谋取私利而特意收集上传,以发扬共享精神。仅供预览或读者私人使用,严禁用于商业使用或公开传播。请在下载预览后尽快删除。,GDI+绘图编程入门,3,学习内容,掌握GDI+的基本知识 Graphics对象与Paint事件 常用的数据结构、画笔、画刷、文字与图像的显示 参考例子GUIsample完成大作业,GDI+,GDI+是Microsoft的新一代的二维图形系统,它完全面向对象。GDI+包括三部分:二维矢量图形绘制、图像处理和文字显示。要在Windows窗体中显示字体或绘制图形必须要使用GDI+。 GDI+提供了多种画笔、画刷、图像等图形对

2、象,此外还包括一些新的绘图功能,如Alpha混色、渐变色、纹理、消除锯齿以及使用包括位图在内的多种图像格式。 GDI+使用的各种类大都包含在命名空间System:Drawing中。,座标系统,在我们开始之前, 一定要先知道GDI+ 的座标系统如何定义。座标原点(0, 0)在左上角, X 轴及Y 轴分别向右及向下增加, 预设的单位长度是像素(pixel), 请看下图:,常用的数据结构,在使用GDI+显示文字和绘制图形时,经常要用到一些数据结构,如Size、Point和Rectangle等。它们在System:Drawing命名空间中定义,都属于值类型(结构类型)。 Point结构 代表Windo

3、ws窗体应用程序中的一个二维表面上的位置,常用于定义窗体或控件的位置;表示一个点的坐标值,具有以下两种属性: X,定义Point结构的x坐标或者水平位置。 Y,定义Point结构的y坐标或者垂直位置。 初始化方法有4种 Point():空点; Point( int x, int y ):直接指定X坐标和Y坐标初始化;,Point结构,Point( int dw ):通过一个用32位的整数来初始化,参数的高16位表示Y坐标,低16位表示X坐标。 Point( Size sz ):通过一个Size变量来初始化。sz的宽度表示X坐标,高度表示Y坐标。 可通过IsEmpty属性检测Point结构是否为

4、空,为空则返回true。 可以直接对Point变量进行+、=、!=运算以及Point变量与Size值的加减操作。 PointF结构类似Point结构,区别是它的坐标是浮点值。 Point值可以隐式自动转换成PointF值;PointF值转换成Point值,可以通过Point结构包含的3种静态方法: Ceiling,每个坐标值取大于或等于原值的最小整数值; Round,每个坐标值四舍五入取最接近的整数值; Truncate,每个坐标值取小于或等于原值的最大整数值。,Size结构,Size结构 用于定义Windows窗体应用程序中的窗口、控件和其他矩形区域的大小。 具有宽度值Width和高度值He

5、ight属性,也可以使用IsEmpty属性来检测Size是否为空。 初始化方法 直接指定高度值和宽度值,Size b = Size( 50,100 ); 通过一个Point变量来初始化, Size a = Size(Point(100,20) ); 判断两个Size变量是否相等可以使用其Equals方法,如 size1.Equals( size2 ); SizeF结构与Size结构类似PointF结构与Point结构。,Rectangle结构,Rectangle结构 保存一个矩形区域的位置和大小,包含有X、Y、Width、Height、Size属性,还有Top、Bottom、Left、Righ

6、t等属性返回各边坐标值。 Rectangle的初始化 指定一个Point值和Size值,如 Rectangle c = Rectangle( point1,size1); 直接指定矩形位置、宽度和高度值,前两个参数指定了矩形左上角的XY坐标值,后两个参数指定矩形的宽度和高度。如 Rectangle d = Rectangle( left1, top1, width1, height1); 包含的一些方法 Contains方法:确定一个矩形或一个点是否在当前矩形区域内。参数类型可以是Point结构,Rectangle结构和点坐标值。 Union方法:求两个矩形的并集。参数是两个要求并集的矩形,返

7、回一个包含其并集的Rectangle结构。,Rectangle结构,Intersect方法:求两个矩形的交集。参数为两个求交的矩形,则返回一个表示其交集的Rectangle结构;参数为一个矩形,则获得当前矩形与参数矩形的交集Rectangle,用这个结果替换当前矩形。 可以直接对Rectangle变量进行等于=或不等于!=操作。 正在绘制或操作一个控件的工作区时,常常使用Rectangle结构。 窗体的工作区是位于标题栏(或有菜单栏)下面,且在窗体边界内部的控件的一部分。Form类中有一个ClientRectangle属性,用于获取工作区的位置。如, Rectangle myRect = Cl

8、ientRectangle; 这里需要注意,状态栏虽然覆盖了工作区,但并没有减少工作区的总大小。在计算一个窗体的可视区域时,要将工作区的大小值减去状态栏的大小。 RectangleF结构:使用SizeF结构和PointF结构。,Graphics对象,在传统的Windows窗口中,使用Device Context,即设备上下文,来进行绘图操作;而在.NET框架的Windows窗体中则使用绘图对象进行绘图操作。 使用System:Drawing命名空间中的Graphics类封装GDI+的绘图对象,在Windows窗体中的所有绘图操作(包括显示文字)都必须通过这个类来进行。Graphics类相当于M

9、FC中的CDC类。 要使用Graphics进行绘图,首先必须获得它的对象实例或是创建一个Graphics对象。最常用的方法是可以通过窗体的Paint事件来获取对象实例,创建对象则通过CreateGraphics方法。,Graphics对象,Graphics类提供的许多绘图方法有: Clear方法:使用一种指定的颜色填充整修绘图表面。例如, Graphics g = this-CreateGraphics; g-Clear( this-BackColor ); /用当前控件的背景色填充 绘制方法,一般都有多个重载,第一个参数一般都是绘制画笔Pen类型: DrawClosedCurve:绘制闭合曲

10、线; DrawCurve:绘制曲线; DrawImage:绘制图像;这里没有使用Pen类型的参数,第一个Image参数指定要绘制的图像,第二个及之后的参数指定绘制的位置。 DrawLine:绘制直线;第二个及之后的参数是两个点的表示。 DrawString:在指定位置以指定字体显示字符串。 DrawRectangle和DrawRectangles:绘制一个或多个矩形。,Graphics对象,填充方法,一般都有多个重载,第一个参数一般都是填充画刷Brush类型: FillRectangle:填充矩形;第二个参数可以是一个矩形结构或者其他可表示矩形的方式(如Point+Size)。 FillClo

11、sedCurve:填充闭合曲线; FillRegion:填充一个区域。两个参数,第一个指定填充使用的画刷(Brush类型),第二个指定填充区域(Region类型)。 FromImage方法:从参数指定的Image对象创建一个新的Graphics对象。 GetHDC方法:返回与Graphics相关联的设备句柄。 ReleaseHDC方法:释放设备句柄。,颜色Color,.NET框架中的颜色基于4种成分。除了三原色红、绿、蓝外,还有第4种称为alpha的值用于指定颜色的透明度。其中每个成分都是一个字节,在0255之间取值。 在GDI+中,用值类型Color结构来表示颜色。在类和方法中要使用颜色的时

12、候,它们都需要Color结构的一个实例。Color结构中预定义了141种颜色,它们都使用静态属性来表示。 其中有一种Transparent颜色,其alpha成分设置为0,表示透明颜色 创建Color对象实例的方法 1. 创建Color实例最简单的方法就是通过一个静态属性来返回。如,Color newColor = Color:Red; 2. 可以使用默认的构造函数来创建Color实例,但是所产生的Color对象是纯黑色的,并且不能修改为其他颜色。,颜色Color,3. 通过调用FromArgb静态方法,它有4种版本。 Color sky = Color:FromArgb( 100, 200,

13、200, 255 ); 参数依次表示alpha成分,红,绿,蓝。 Color sky = Color:FromArgb( 200, 200, 255 ); 这里缺省了alpha成分,它隐式地设置为它的最大值,生成一种完全不透明的颜色。 Color sky = Color:FromArgb( 100, Color:Blue ); 这里使用一个现有的Color对象实例,只是修改了alpha成分的值。 Color sky = Color:FromArgb( 0 x64C8C8FF ); 使用一个形式为AARRGGBB的组合整数。,颜色Color,4. 通过调用FromKnownColor静态方法,参

14、数为KnownColor枚举类型的值。如 Color sky = Color:FromKnownColor(KnownColor:Blue); KnownColor枚举类型:其值包含了Color结构的所有141种颜色以及SystemColors类的26种颜色。 5. 通过调用FromName静态方法,参数是一个字符串,这个字符串必须是KnownColor枚举值的名称。如,Color sky = Color:FromName( “Blue” ); Color属性 具有4个只读属性,可以用于提取颜色的各种成分 A,返回颜色的alpha成分; R,红色成分;G,绿色成分;B,蓝色成分。,颜色Colo

15、r,其他有用的非静态属性 IsNamedColor,判断颜色值是否在140个命名颜色中; IsKnownColor,判断颜色值是否KnownColor枚举的颜色; IsSystemColor,判断颜色值是否SystemColor类的属性值。 Windows系统使用一些系统范围的颜色,如活动边框的颜色和标题栏颜色等。.NET框架为这些系统颜色提供了一个封装类SystemColors。 各种系统颜色以静态属性的形式保存在这个类中,可以直接通过类名来引用。具体系统颜色见表。,使用字体,在窗体或控件中都包含有Font属性,表示窗体或控件当前使用的字体。在窗体或控件创建时,会使用系统的默认字体值。 字体

16、使用Drawing:Font类封装,通过创建这么个类的实例可以创建新的字体。 在创建时需要指定字体的名称、大小和风格,如果不指定字体风格则将创建常规字体。 Font构造函数 下面语句创建一个12磅的粗体隶书字体。 Font font1 = gcnew Font(“隶书”,12, FontStyle:Bold); 下面语句使用指定的度量单位而不是磅值来创建字体 Font font2 = gcnew Font(“隶书”,12, GraphiUnit:Document); 组合前两个构造函数 Font font3 = gcnew Font(“隶书”,12, FontStyle:Bold, Graph

17、iUnit:Document);,使用字体,GraphicsUnit枚举类型,用于指定给定数据的度量单位。 Display,将 1/75 英寸指定为度量单位。 Document,将文档单位(1/300 英寸)指定为度量单位。 Inch,英寸。 Millimeter,毫米。 Pixel,设备像素。 Point,打印机点(1/72 英寸)。 World,通用单位。 .NET框架中字体风格使用FontStyle枚举类型定义。其值有以下一些,它们可以组合使用: Bold:设置字体风格为粗体; Italic:设置字体风格为斜体; Regular:常规字体; Strikeout:字体带删除线; Under

18、line:字体带下划线。,使用字体,一个字体所具有的属性是只读的,修改任何一个属性都将产生一个新的字体。最常用属性有: Bold,字体是否为粗体; FontFamily,FontFamily枚举值,确定字体的字符集; Height,字体高度; Italic,字体是否为斜体; Size,字体大小; SizeInPoints,字体的磅值,不考虑当前的Unit属性设置; Strikeout,字体是否有删除线; Style,应用于这个字体的所有FontStyle枚举值; Underline,字体是否有下划线; Unit,GraphicsUnit枚举值,确定Height、Width和Size属性使用的单

19、位。 字体示例程序,使用画笔,用Pen类型封装,用于绘制图形。可以使用这个类来创建一个指定颜色、默认宽度的画笔对象。 构造函数 Pen penRed = gcnew Pen(Color:Red); 这里通过参数指定画笔颜色,初始宽度默认为1。 Pen PenRed = gcnew Pen(Color:Red, 10); 参数指定画笔颜色和宽度。 Pen PenRed = gcnew Pen(brushRed); 参数中使用画刷对象来指定画笔的模式。 Pen PenRed = gcnew Pen(brushRed, 5); 参数中使用画刷来指定画笔模式,同时指定宽度。,使用画笔,Pen类型可以动

20、态修改属性,改变属性时不必重新创建Pen对象。Pen类常用属性有: Alignment,指定Pen对象的对齐方式;是一个PenAlignment枚举值。 Brush,获取或设置用于确定此 Pen对象的属性的 Brush对象 ; Color,获取或设置画笔颜色; EndCap,指定线条末端出现的形状。这是一个LineCap枚举值,默认为LineCap:Flat。 LineJoin,指定此 Pen对象绘制的两条连续直线终点之间的联接样式。这是一个LineJoin枚举值。 PenType,获取用此 Pen对象绘制的直线的样式,是一个 PenType枚举值。 StartCap,指定线条起点出现的形状。

21、默认为LineCap:Flat。 Width,获取或设置画笔绘制的线条的宽度。,使用画笔,一些枚举类型(System:Drawing:Drawing2D 命名空间 ) PenAlignment枚举类型:指定相对于理论上、零宽度的线条的 Pen对象的对齐方式。画笔宽度的中点根据这个枚举值相对于所绘制的线条对齐 。 Center,在线条边界的中间画直线。 Inset,在构成一条曲线或者一个图形边界的线条内部画直线。 Left,指定被定位于所绘制的线条的左侧。 Outset,指定被定位于所绘制的线条的外侧。 Right,指定被定位于所绘制的线条的右侧。 LineCap枚举类型:用于指定如何绘制线条的

22、端点。 AnchorMask,一个掩码值,测试LineCap值是否指定了一个锚头帽。 ArrowAnchor,指定箭头状锚头帽;DiamondAnchor,指定菱形锚头帽。 Custom,指定自定义线帽。 Flat,不画帽,默认值;NoAnchor,没有锚,与Flat有同样的效果。 Round,指定圆线帽;RoundAnchor,指定圆锚头帽。 Square,指定方线帽;SquareAnchor,指定方锚头帽。 Triangle,指定三角线帽。,使用画笔,LineJoin枚举类型:指定如何连接连续的线条。 Bevel,指定成斜角的联接。这将产生一个斜角。 Miter,指定斜联接。扩展线条的外界

23、,直到它们相接触。 MiterClipped,指定斜联接。这种方式要受Pen类的MiterLimit属性的限制。 Round,指定圆形联接。这将在两条线之间产生平滑的圆弧。 PenType枚举类型:指定用来填充线条的 Pen对象填充类型 。 HatchFill,指定阴影填充。 LinearGradient,指定线性渐变填充。 PathGradient,指定路径渐变填充。 SolidColor,指定实填充。 TextureFill,指定位图纹理填充。,使用画笔,Pen类的DashStyle属性:设置或获取画笔的风格。其属性值在System:Drawing:Drawing2D命名控件中的DashS

24、tyle枚举类型中定义。可取值有: Custom:自定义风格; Dash:划线, DashDot:划线点, DashDotDot:划线点点, Dot:点线, Solid:实线,,使用画笔,SystemPens类 Windows系统颜色画笔,用于创建与用户界面和系统颜色相匹配的笔。它的每个静态属性都返回一个Pen对象。 下面这行语句创建一个Pen对象,将它初始化为用户加亮显示文本时首选的颜色。 Pen highlightPen = SystemPens:HighlightText; SystemPens的一些静态属性 Control,控件背景颜色; ActiveCaptionText,活动窗口标

25、题栏的文本颜色; HighlightText,加亮显示的文本颜色; WindowText,窗口的文本颜色; WindowFrame,窗口的图文框颜色。,使用画笔,FromSystemColor静态方法:可以根据作为参数传递给这个方法的一个Color值来创建画笔。如, Pen pen1 = gcnew SystemPens:FromSystemColor(SystemColors:Window); 从SystemPens类得到的所有Pen的引用都是1个像素的默认宽度,对它们不能进行修改。如果要使用可选择宽度或类型的画笔,只能使用Pen类来创建。 Pens类 提供了很多预定义颜色的画笔对象,它们以

26、静态属性的形式保存。例如要创建一个红色画笔,可以调用Pens :Red属性。如,Pen pen1 = Pens:Red; Pens类中颜色命名规则与Color类中相同,知道颜色名字则可以直接调用。,使用画刷,显示文字时除了指定字体外,还要指定画刷,另外在图形的填充时也需要使用画刷,同时画笔也可以基于画刷来创建。 使用Brush类表示,这是一个抽象类,不能直接用来创建画刷实例。在.NET框架中提供了一些派生类,可以使用它们来创建画刷对象。 在System:Drawing命名空间中定义了两个最基本的画刷:SolidBrush和TextureBrush。其他的3种用于更高级的效果,在System:D

27、rawing:Drawing2D命名空间中可以找到。 SolidBrush类,使用一种纯色来填充区域; 创建方法 SolidBrush skyBrush =gcnew SolidBrush(Color:Blue); 只有一个Color属性,用于获取或设置画刷颜色。,使用画刷,TextureBrush类,使用一个图像来填充区域; 可以使用整个图像或者仅仅是图像的一部分来构造画刷;也可以旋转或按比例调整整个图像来满足要求。 构造方法:最简单的就是传入一个图像。如, TextureBrush br = gcnew TextureBrush(“C:image1.bmp”); 支持多种图像格式(bmp,

28、gif,jpeg等)。 常用属性 WrapMode,指定这个画笔的换行模式。这是个WrapMode枚举值。 WrapMode枚举类型:用于确定这个画刷填充区域的方式。 Clamp,不平铺,画刷图像只显示一次。 Tile,默认值,平铺画刷图像填充整个区域。 TileFlipX,平铺画刷图像填充整个区域。每隔一列水平反转这个图像。 TileFlipY,平铺画刷图像填充整个区域。每隔一行垂直反转这个图像。 TileFlipXY,结合上两个枚举值的行为。,使用画刷,HatchBrush类,用预定义的阴影图案来填充区域; 每种阴影模式由两种颜色组成:背景和前景。可以通过这个画刷类来指定这两种颜色和阴影模

29、式的类型。 LinearGradientBrush类,用一个线性渐变区来填充区域; 这个画刷使用从一种色调渐变到另一种色调的颜色填充区域。这里画刷中保存了进行渐变的两种颜色。 PathGradientBrush类,用一个路径渐变区来填充区域。 使用一组渐变的颜色来填充区域。与LinearGradientBrush类不同的是,这个画刷为渐变区提供了更灵活的形状。,使用画刷,标准画刷Brushes类 包含了所有标准颜色的画刷,Color类中每一个预定义的颜色都在这个类中有一个对应的画刷。这些标准画刷以静态属性保存在Brushes类中,可以直接引用。 例如,Brush brushRed = Brus

30、hes:Red; 系统颜色画刷SystemBrushes类 对应Windows的系统颜色,这些画刷也做为静态属性在SystemBrushes类中保存。,显示文字,Windows窗体程序中文字的显示通过Graphics类的DrawingString方法进行。 调用这个方法时要指定显示的字符串、使用的字体、使用的画刷以及显示的位置。 可以通过创建丰富多彩的画刷来实现文字的特效显示。 代码示例 Image img = Image:FromFile(“sample.jpg”); TextureBrush tb = gcnew TextureBrush(img); Font f = gcnew Font

31、(“隶书”, 72); Graphics gg = e-Graphics; gg-DrawString( “VS2005”, f, tb, 10, 80 ); 可以使用StringFormat类型对象来改变文字显示方向,作为一个参数放在位置参数后面。 设置这个类的FormatFlags属性,其值由StringFormatFlags枚举定义。,显示文字,StringFormat类为DrawString和其他方法指定文本布局的选项。 具有用于控制格式选项的属性,常见的有: Alignment,指定水平的文本的对齐方式。是一个StringAlignment枚举值。 FormatFlags,指定格式化

32、信息。是一个StringFormatFlags枚举值。 LineAlignment,指定垂直文本(也就是行)的对齐方式。是一个StringAlignment枚举值。 StringAlignment枚举类型:指定文本字符串相对于其布局矩形的对齐方式 。 Center,指定文本在布局矩形中居中对齐。 Far,指定文本远离布局矩形的原点位置对齐。在左到右布局中,远端位置是右。在右到左布局中,远端位置是左。 Near,指定文本靠近布局对齐。在左到右布局中,近端位置是左。在右到左布局中,近端位置是右。,显示文字,StringFormatFlags枚举类型:指定文本字符串的显示和布局信息 ,可以组合使用。

33、 DirectionRightToLeft,指定文本从右到左排列。 DirectionVertical,指定文本垂直排列。 DisplayFormatControl,作为格式符号,显示指定的格式字符。 FitBlackBox,指定任何标志符号的任何部分都不突出边框。在默认情况下,需要在边缘处可见时,一些标志符号会稍微突出边框。例如,在 一些字体中,当小写斜体的 f 与边框的最左边对齐时,f 的下半部分会稍微突出到边框左边缘之左。设置此标记将确保任何绘图都不会超出边框,但是将导致文本的相邻行的对齐边缘看上去不齐。,显示文字,LineLimit,在格式化的矩形中只布置整行。默认情况下,这种布置要继

34、续到文本的结尾为止,或者到由于剪辑而不再有可见的行为止,看哪一种情况先发生。注意,此默认设置允许不是行高整数倍的格式化矩形将最后一行部分地遮住。若要确保看到的都是整行,请指定此值,并仔细地提供格式化矩形,使其高度至少为一个行高。 。 MeasureTrailingSpaces,在默认情况下,MeasureString方法返回的边框都将排除每一行结尾处的空格。设置此标记以便在测定时将空格包括进去 NoClip,允许显示标志符号的伸出部分和延伸到边框外的未换行文本。在默认情况下,延伸到边框外侧的所有文本和标志符号部分都被剪裁。 NoFontFallback,对于请求的字体中不支持的字符,禁用回退到

35、可选字体。缺失的任何字符都用缺失标志符号的字体显示,通常是一个空的方块。 NoWrap,在矩形中进行格式化时禁用文本换行。当传递的是点而不是矩形时,或者指定的矩形行长为零时,已隐含此标记。,显示图像,使用Image类封装基本的图像操作。 Image类是个抽象基类,不能直接用来创建对象实例。提供了几个静态方法用来从文件中载入图像,如FromFile和FromStream方法,支持多种图像文件格式(bmp、jpg和gif等) .NET框架提供了几个派生类,可以用于创建对象实例 Bitmap类:封装了GDI+位图(.bmp文件格式),可以使用这个类来操作位图。 创建位图实例时,可以指定位图文件路径名

36、,创建的新对象就会自动装入位图,然后可以调用Graphics类的DrawImage方法来显示位图。 Bitmap bmp = gcnew Bitmap(“sample.jpg”); this-CreateGraphics() -DrawImage(bmp, 100,100 );,显示图像,可以在显示图像时进行缩放操作。比如说可以使用一个Rectangle变量来指定位图位置和大小。 Rectangle rec = gcnew Rectangle(10, 10, 100, 100); this-CreateGraphics() -DrawImage(bmp,rec); 可以只显示部分位图。比如说切取位图的左上角一块然后在目标矩形变量中显示。 Clone方法:复制位图; GetPixel和SetPixel方法:获取或设置位图中特定像素的颜色; SetResolution方法:重新设置位图大小; MakeTransparent方法:把

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论