GDI+_C_图形程序设计基础_第1页
GDI+_C_图形程序设计基础_第2页
GDI+_C_图形程序设计基础_第3页
GDI+_C_图形程序设计基础_第4页
GDI+_C_图形程序设计基础_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、1C#图形程序设计基础图形程序设计基础1 GDI+绘图基础绘图基础2 基本图形的绘制基本图形的绘制3 实用图形程序设计实用图形程序设计21 GDI+绘图基础绘图基础1.1 图形设备接口图形设备接口 GDI+:Graphics Device Interface Plus,它提供了各种丰富,它提供了各种丰富的图形图像处理功能的图形图像处理功能 在在C#.NET中,使用中,使用GDI+处理二维(处理二维(2D)的图形和图像,)的图形和图像,使用使用DirectX处理三维(处理三维(3D)的图形图像)的图形图像 GDI+主要有二维矢量图形、图像处理和版式三部分组成主要有二维矢量图形、图像处理和版式三部

2、分组成 GDI+提供了存储基元自身相关信息的类和结构、存储基元提供了存储基元自身相关信息的类和结构、存储基元绘制方式相关信息的类,以及实际进行绘制的类绘制方式相关信息的类,以及实际进行绘制的类 GDI+ 为使用各种字体、字号和样式来显示文本这种复杂任为使用各种字体、字号和样式来显示文本这种复杂任务提供了大量的支持务提供了大量的支持 其他高级功能其他高级功能3图形图像处理中常常调用的名称空间:图形图像处理中常常调用的名称空间:System:包括常用基础数据类型和:包括常用基础数据类型和24个子名称空间个子名称空间System.Drawing:提供了对提供了对GDI+基本图形功能的访问,主要基本图

3、形功能的访问,主要有有Graphics类、类、Bitmap类、从类、从Brush类继承的类、类继承的类、Font类、类、Icon类、类、Image类、类、Pen类、类、Color类等类等System.Drawing.Drawing2D:提供了高级的二维和矢量图形功:提供了高级的二维和矢量图形功能。主要有梯度型画刷、能。主要有梯度型画刷、Matrix类(用于定义几何变换)和类(用于定义几何变换)和GraphicsPath类等类等 System.Drawing.Imaging:提供了高级:提供了高级 GDI+ 图像处理功能图像处理功能System.WinForms:提供许多与数据处理相关的结构的类

4、:提供许多与数据处理相关的结构的类 System.Timers:提供精确的计时操作:提供精确的计时操作System.Drawing.Text:提供了高级:提供了高级 GDI+ 字体和文本排版功能字体和文本排版功能41.2 创建创建Graphics对象对象GraphicsGraphics类包含在类包含在System.DrawingSystem.Drawing名称空间下。要进行图形处名称空间下。要进行图形处理,必须首先创建理,必须首先创建GraphicsGraphics对象,然后才能利用它进行各种对象,然后才能利用它进行各种画图操作,即先创建画图操作,即先创建GraphicsGraphics对象再

5、使用该对象的方法绘图、对象再使用该对象的方法绘图、显示文本或处理图像。显示文本或处理图像。创建创建GraphicsGraphics对象的形式有:对象的形式有:1.1.在窗体或控件的在窗体或控件的PaintPaint事件中直接引用事件中直接引用GraphicsGraphics对象对象 每一个窗体或控件都有一个每一个窗体或控件都有一个PaintPaint事件,该事件的参数中包事件,该事件的参数中包含了当前窗体或控件的含了当前窗体或控件的GraphicsGraphics对象,对象,在为在为窗体或窗体或控件创建绘控件创建绘制代码时,一般使用此方法来获取对图形对象的引用:制代码时,一般使用此方法来获取对

6、图形对象的引用:Private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; 52.2.利用窗体或某个控件的利用窗体或某个控件的CreateGraphicsCreateGraphics方法方法此方法所建对象是该控件或窗体的绘图区域,可把当前窗体的此方法所建对象是该控件或窗体的绘图区域,可把当前窗体的画刷、字体、颜色作为缺省值获取对画刷、字体、颜色作为缺省值获取对GraphicsGraphics对象的引用,对象的引用,注意这种对象只有在处理当前注意这种对

7、象只有在处理当前WindowsWindows窗口消息的过程中有效;窗口消息的过程中有效;如果想在已存在的窗体或控件上绘图,可以使用此方法。如果想在已存在的窗体或控件上绘图,可以使用此方法。例如:例如: Graphics g=this.CreatGraphics();Graphics g=this.CreatGraphics();3.3.从继承自图像的任何对象创建从继承自图像的任何对象创建GraphicsGraphics对象对象此方法在需要更改已存在的图像时十分有用,此方法在需要更改已存在的图像时十分有用,例如:例如: Bitmap bitmap = new Bitmap(Bitmap bitm

8、ap = new Bitmap(”C:testa1.bmpC:testa1.bmp”);); Graphics g = Graphics.FromImage( bitmap ); Graphics g = Graphics.FromImage( bitmap );6在图形图像处理程序设计中,与在图形图像处理程序设计中,与GraphicsGraphics对象一起使用的用户对象一起使用的用户对象常有:对象常有:PenPen:用于绘制线条、勾勒形状轮廓等;:用于绘制线条、勾勒形状轮廓等;BrushBrush:用于填充图形区域;:用于填充图形区域;FontFont:提供有关在呈现文本时要使用什么形状的

9、说明;:提供有关在呈现文本时要使用什么形状的说明;ColorColor:该结构表示要显示的不同颜色:该结构表示要显示的不同颜色注意:由于图像对象非常占资源,所以在不用这些对象时要用注意:由于图像对象非常占资源,所以在不用这些对象时要用DisposeDispose方法及时释放资源方法及时释放资源7附:附: 颜色颜色颜色是进行图形操作的基本要素。任何一种颜色都可以由四个颜色是进行图形操作的基本要素。任何一种颜色都可以由四个分量决定,每个分量占据一个字节:分量决定,每个分量占据一个字节: R R:红色,取值范围:红色,取值范围0 0255255,255255为饱和红色为饱和红色 G G:绿色,取值范

10、围:绿色,取值范围0 0255255,255255为饱和绿色为饱和绿色 B B:蓝色,取值范围:蓝色,取值范围0 0255255,255255为饱和蓝色为饱和蓝色 A A:AlphaAlpha值,即透明度。取值范围值,即透明度。取值范围0 0255255,0 0为完全透明,为完全透明,255255为完全不透明为完全不透明在在System.System.DrawingDrawing名称空间下,有一个名称空间下,有一个ColorColor结构类型,包含系结构类型,包含系统已定义的颜色种类。统已定义的颜色种类。可以使用下列方法创建颜色对象:可以使用下列方法创建颜色对象: 使用使用FromArgbFr

11、omArgb指定任意颜色指定任意颜色 这个方法有两种常用的形式:这个方法有两种常用的形式:8第一种形式是直接指定三种颜色,方法原型为:第一种形式是直接指定三种颜色,方法原型为:public static Color FromArgb( int red, int green, int blue ) 三个参数分别表示三个参数分别表示R R、G G、B B三色,三色,AlphaAlpha值使用缺省值值使用缺省值255255,即,即完全不透明;例如:完全不透明;例如:Color red = Color.FromArgb( 255, 0, 0);Color green = Color.FromArgb(

12、 0, 255, 0);Color blue = Color.FromArgb( 0, 0, 0 xff); 其中,其中,0 xff0 xff为十六进制表示形式。为十六进制表示形式。第二种形式使用四个参数,格式为:第二种形式使用四个参数,格式为:public static Color FromArgb( int alpha, int red, int green, int blue )四个参数分别表示透明度和四个参数分别表示透明度和 R R、G G、B B三色值。三色值。9使用系统预定义颜色使用系统预定义颜色 在在Color结构中已经预定义了结构中已经预定义了141种颜色,可以直接使种颜色,可

13、以直接使用,例如:用,例如: Color myColor; myColor = Color.Red; myColor = Color.Aquamarine; myColor = Color.LightGoldenrodYellow; 101.3 创建画笔对象创建画笔对象用用PenPen类创建画笔对象,画笔通常具有宽度、样式和颜色三种属类创建画笔对象,画笔通常具有宽度、样式和颜色三种属性。性。1.Pen1.Pen对象的创建:对象的创建:public Pen( Color color );public Pen( Color color );public Pen( Color color, floa

14、t width );public Pen( Color color, float width );public Pen( Brush brush );public Pen( Brush brush );public Pen( Brush brush, float width );public Pen( Brush brush, float width );如:如:Pen myPen = new Pen( Color.Black );Pen myPen = new Pen( Color.Black );Pen myPen = new Pen( Color.Black, 5 );Pen myPen

15、 = new Pen( Color.Black, 5 );SolidBrush myBrush = new SolidBrush( Color.Red );SolidBrush myBrush = new SolidBrush( Color.Red );Pen myPen = new Pen( myBrush);Pen myPen = new Pen( myBrush);Pen myPen = new Pen( myBrush, 5 );Pen myPen = new Pen( myBrush, 5 );112.Pen2.Pen对象的属性:对象的属性:画笔对象的属性用于返回或设置画笔对象的颜色

16、、画线样式、画笔对象的属性用于返回或设置画笔对象的颜色、画线样式、画线始点及终点的样式等。常用属性如下:画线始点及终点的样式等。常用属性如下:Color:Color:DashCap:DashCap:DashStyle:DashStyle:EndCap:EndCap:PenType:PenType:StartCap:StartCap:Width:Width:例:例:121) 1) 新建一个新建一个WindowsWindows应用程序,适当加宽窗体宽度。然后应用程序,适当加宽窗体宽度。然后切换到代码方式,添加名称空间引用:切换到代码方式,添加名称空间引用: using System.Drawing

17、.Drawing2D; 2) 2) 添加添加Form1_PaintForm1_Paint事件代码。事件代码。 private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;Pen pen = new Pen( Color.Blue, 10.5f ); g.DrawString( 蓝色,宽度为蓝色,宽度为10.5, this.Font, new SolidBrush(Color.Black), 5, 5 );g.DrawLine( pen, new Poi

18、nt(110,10), new Point(380,10) );pen.Width=2; pen.Color=Color.Red;g.DrawString( 红色,宽度为红色,宽度为2, this.Font, new SolidBrush(Color.Black), 5, 25 );13 g.DrawLine( pen, new Point(110,30), new Point(380,30) ); pen.StartCap = LineCap.Flat; pen.EndCap = LineCap.ArrowAnchor; pen.Width = 9; g.DrawString( 红色箭头线红

19、色箭头线, this.Font, new SolidBrush(Color.Black), 5, 45); g.DrawLine( pen,new Point(110,50), new Point(380,50); pen.DashStyle = DashStyle.Custom; pen.DashPattern = new float 4,4; pen.Width = 2; pen.EndCap = LineCap.NoAnchor; g.DrawString( 自定义虚线自定义虚线, this.Font, new SolidBrush(Color.Black), 5, 65 ); g.Dr

20、awLine( pen, new Point(110,70), new Point(380,70) ); pen.DashStyle = DashStyle.Dot; g.DrawString(点划线点划线, this.Font, new SolidBrush(Color.Black), 5, 85); g.DrawLine( pen, new Point(110,90), new Point(380,90); 14运行结果运行结果 151.4 创建画刷创建画刷画刷是可与画刷是可与GraphicsGraphics对象一起使用来创建实心形状和呈现文本对象一起使用来创建实心形状和呈现文本的对象。可

21、以用画刷填充各种图形形状,如矩形、椭圆、扇的对象。可以用画刷填充各种图形形状,如矩形、椭圆、扇形、多边形和封闭路径等。形、多边形和封闭路径等。几种不同类型的画刷几种不同类型的画刷: SolidBrush:画刷最简单的形式,用纯色进行绘制画刷最简单的形式,用纯色进行绘制 HatchBrush:类似于类似于 SolidBrush,但是可以利用该类从大,但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色量预设的图案中选择绘制时要使用的图案,而不是纯色 TextureBrush:使用纹理(如图像)进行绘制使用纹理(如图像)进行绘制 LinearGradientBrush:使用沿渐变混

22、合的两种颜色进行绘使用沿渐变混合的两种颜色进行绘制制 PathGradientBrush :基于编程者定义的唯一路径,使用复基于编程者定义的唯一路径,使用复杂的混合色渐变进行绘制杂的混合色渐变进行绘制16(1)(1)使用使用SolidBrushSolidBrush类定义单色画笔类定义单色画笔 SolidBrushSolidBrush类用于定义单色画笔。该类只有一个构造函类用于定义单色画笔。该类只有一个构造函数,带有一个数,带有一个ColorColor类型的参数。类型的参数。 下面的示例说明如何在窗体上绘制一个纯红色的椭圆。下面的示例说明如何在窗体上绘制一个纯红色的椭圆。该椭圆将符合为其提供的矩

23、形的大小(此例中为表示整个该椭圆将符合为其提供的矩形的大小(此例中为表示整个窗体的窗体的ClientRectangleClientRectangle)。)。例例: :private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;SolidBrush myBrush = new SolidBrush( Color.Red );g.FillEllipse( myBrush, this.ClientRectangle ); 17运行效果运行效果18(2)(2)

24、使用使用HatchBrushHatchBrush类绘制简单图案类绘制简单图案 HatchBrushHatchBrush类用于从大量预设的图案中选择绘制时要使用类用于从大量预设的图案中选择绘制时要使用的图案,而不是纯色。的图案,而不是纯色。 下面的示例说明如何创建一个下面的示例说明如何创建一个HatchBrushHatchBrush,它使用,它使用90%90%的的阴影,前景色与背景色的比例为阴影,前景色与背景色的比例为90:10090:100,并使用白色作为前,并使用白色作为前景色,黑色作为背景色。景色,黑色作为背景色。例例: : private void Form1_Paint(object

25、sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics;HatchBrush aHatchBrush = new HatchBrush( HatchStyle.Percent90, Color.White, Color.Black);g.FillEllipse( aHatchBrush, this.ClientRectangle ); 19运行效果:运行效果:20(3)(3)使用使用TextureBrushTextureBrush类绘制复杂图案类绘制复杂图案 TextureBrushTextureBrush类

26、允许使用一幅图像作为填充的样式。该类类允许使用一幅图像作为填充的样式。该类提供了提供了5 5个重载的构造函数,分别是:个重载的构造函数,分别是: Public TextureBrush( Image ) Public TextureBrush( Image, Rectangle ) Public TextureBrush( Image, WrapMode ) Public TextureBrush( Image, Rectangle, ImageAttributes) Public TextureBrush( Image, WrapMode, Rectangle)其中:其中:ImageImag

27、e:用于指定画笔的填充图案。:用于指定画笔的填充图案。 RectangleRectangle:用于指定图像上用于画笔的矩形区域,其位置不能超:用于指定图像上用于画笔的矩形区域,其位置不能超 越图像的范围。越图像的范围。 WrapModeWrapMode:WrapModeWrapMode枚举成员用于指定如何排布图像,可以是枚举成员用于指定如何排布图像,可以是 Clamp Clamp 完全由绘制对象的边框决定完全由绘制对象的边框决定 Tile Tile 平铺平铺 TileFlipX TileFlipX 水平方向翻转并平铺图像水平方向翻转并平铺图像 TileFlipY TileFlipY 垂直方向翻

28、转并平铺图像垂直方向翻转并平铺图像 TileFlipXY TileFlipXY 水平和垂直方向翻转并平铺图像水平和垂直方向翻转并平铺图像21 ImageAttributes ImageAttributes:用于指定图像的附加特性参数。:用于指定图像的附加特性参数。 TextureBrushTextureBrush类有三个属性:类有三个属性: ImageImage:ImageImage类型,与画笔关联的图像对象。类型,与画笔关联的图像对象。 TransformTransform:MatrixMatrix类型,画笔的变换矩阵。类型,画笔的变换矩阵。 WrapModeWrapMode:WrapMod

29、eWrapMode枚举成员,指定图像的排布方式。枚举成员,指定图像的排布方式。 下面的示例说明了如何创建一个下面的示例说明了如何创建一个TextureBrush,例子使,例子使用名为用名为m23.jpg的图像进行绘制。的图像进行绘制。 例例: :private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;TextureBrush myBrush = new TextureBrush(new Bitmap(e:testm23.jpg);g.FillEll

30、ipse( myBrush, this.ClientRectangle ); 22运行效果:运行效果:23(4)(4)使用使用LinearGradientBrushLinearGradientBrush类定义线性渐变类定义线性渐变 这个类用于定义线性渐变画笔,可以是双色渐变,也可这个类用于定义线性渐变画笔,可以是双色渐变,也可以是多色渐变。缺省情况下,渐变由起始颜色沿着水平方以是多色渐变。缺省情况下,渐变由起始颜色沿着水平方向平均过渡到终止颜色。要定义多色渐变,需要使用向平均过渡到终止颜色。要定义多色渐变,需要使用InterpolationColorsInterpolationColors属性

31、。下面的示例说明如何由白色渐属性。下面的示例说明如何由白色渐变到蓝色。变到蓝色。例例: :private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; LinearGradientBrush myBrush = new LinearGradientBrush( this.ClientRectangle, Color.White, Color.Blue, LinearGradientMode.Vertical ); g.FillRectangle( m

32、yBrush, this.ClientRectangle );24 如果创建应用程序后向设计窗体上拖放一些控件,如果创建应用程序后向设计窗体上拖放一些控件,可以看到运行后该图就是一个漂亮的背景了。可以看到运行后该图就是一个漂亮的背景了。 25(5)(5)使用使用PathGradientBrushPathGradientBrush类实现彩色渐变类实现彩色渐变 在在GDI+GDI+中,把一个或多个图形组成的形体称作路径。可以中,把一个或多个图形组成的形体称作路径。可以使用使用GraphicsPathGraphicsPath类定义路径,使用类定义路径,使用PathGradientBrushPathG

33、radientBrush类定类定义路径内部的渐变色画笔。渐变色从路径内部的中心点逐渐过义路径内部的渐变色画笔。渐变色从路径内部的中心点逐渐过渡到路径的外边界边缘。渡到路径的外边界边缘。PathGradientBrushPathGradientBrush类有三种形式的构造函数,形式之一是:类有三种形式的构造函数,形式之一是: public PathGradientBrush( GraphicsPath path ) 其中,其中,GraphicsPathGraphicsPath定义画笔填充的区域。定义画笔填充的区域。例例, ,路径和路径画笔的使用路径和路径画笔的使用: : using System

34、.Drawing.Drawing2D;using System.Drawing.Drawing2D; 26private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;Point centerPoint = new Point(150,100);int R=60; GraphicsPath path=new GraphicsPath();path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R);Pa

35、thGradientBrush brush=new PathGradientBrush(path); /指定路径中心点指定路径中心点brush.CenterPoint=centerPoint;/指定路径中心点的颜色指定路径中心点的颜色brush.CenterColor=Color.Red;/Color类型的数组指定与路径上每个顶点对应的颜色类型的数组指定与路径上每个顶点对应的颜色brush.SurroundColors=new Color Color.Plum ;27g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R, 2*R,2*R); c

36、enterPoint=new Point(350,100); R=20;path=new GraphicsPath();path.AddEllipse( centerPoint.X-R,centerPoint.Y-R,2*R,2*R);path.AddEllipse( centerPoint.X-2*R,centerPoint.Y-2*R, 4*R,4*R);path.AddEllipse(centerPoint.X-3*R,centerPoint.Y-3*R, 6*R,6*R); brush=new PathGradientBrush(path);brush.CenterPoint=cent

37、erPoint;brush.CenterColor=Color.Red;brush.SurroundColors=new Color Color.Black,Color.Blue,Color.Green ;g.FillPath(brush,path);28 在这个例子中,可以看到当使用在这个例子中,可以看到当使用FillPath()FillPath()方法填充路径的时方法填充路径的时候,如果多个图形互相重叠,则重叠部分的数目为偶数时不会被填候,如果多个图形互相重叠,则重叠部分的数目为偶数时不会被填充,因此右图中间部分仍为背景色而不是蓝色。充,因此右图中间部分仍为背景色而不是蓝色。 29附附:平

38、移、旋转与缩放平移、旋转与缩放 Graphics Graphics类提供了三种对图像进行几何变换的方法,它们类提供了三种对图像进行几何变换的方法,它们是是TranslateTransform()TranslateTransform()方法、方法、RotateTransform()RotateTransform()方法和方法和ScaleTransform()ScaleTransform()方法,分别用于图形图像的平移、旋转和方法,分别用于图形图像的平移、旋转和缩放(以坐标系原点为中心)。缩放(以坐标系原点为中心)。TranslateTransform( )TranslateTransform(

39、)方法的形式为:方法的形式为: public void TranslateTransform(float dx,float dy) 其中,其中,dxdx表示平移的表示平移的x x分量,分量,dydy表示平移的表示平移的y y分量分量; ;RotateTransform( )RotateTransform( )方法的形式为:方法的形式为: public void RotateTransform(float angle) 其中,其中,angleangle表示旋转角度表示旋转角度; ;ScaleTransform( )ScaleTransform( )方法的形式为:方法的形式为: public vo

40、id ScaleTransform(float sx,float sy) 其中,其中,sx表示表示x方向的缩放比例,方向的缩放比例,sy表示表示y方向的缩放比例方向的缩放比例; ; 30例:三种变换方法示例。例:三种变换方法示例。 privateprivate voidvoid Form1_Paint( Form1_Paint(objectobject sender, sender, System.Windows.Forms.PaintEventArgs e) System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics;Grap

41、hics g = e.Graphics;g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.FromArgb( 80, Color.Red ), SolidBrush(Color.FromArgb( 80, Color.Red ), 120,30,200,100); 120,30,200,100); /椭圆透明度椭圆透明度80%80%g.RotateTransform(30.0f); g.RotateTransform(30.0f); /顺时针旋转顺时针旋转3030度度g.FillEllipse(g.FillEllipse(new new S

42、olidBrush(Color.FromArgb(80,Color.Blue),SolidBrush(Color.FromArgb(80,Color.Blue), 120,30,200,100); 120,30,200,100);/水平方向向右平移水平方向向右平移200200个像素,垂直方向向上平移个像素,垂直方向向上平移100100个像素个像素g.TranslateTransform(200.0f,-100.0f);g.TranslateTransform(200.0f,-100.0f);g.FillEllipse(g.FillEllipse(new new SolidBrush(Color

43、.FromArgb(50,Color.Green),SolidBrush(Color.FromArgb(50,Color.Green), 120,30,200,100); 120,30,200,100);g.ScaleTransform(0.5f,0.5f); g.ScaleTransform(0.5f,0.5f); /缩小到一半缩小到一半 g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.FromArgb(100, Color.Red),SolidBrush(Color.FromArgb(100, Color.Red), 120,30,2

44、00,100); 120,30,200,100); 31322 基本图形的绘制基本图形的绘制1. 画点画点C#采用采用Point结构和结构和SetPixel()方法完成画点的功能;其中方法完成画点的功能;其中Point用于图形设计,用于图形设计,SetPixel()用于图像处理用于图像处理Point原型:原型: public struct Point;使用:使用: public Point p1 = new Point();每个点结构有每个点结构有x和和y两个属性,表示横纵坐标,如:两个属性,表示横纵坐标,如:p1.x = 30;p1.y = 100;332. 画直线画直线1) DrawLin

45、e方法方法public void DrawLine( Pen pen, int x1, int y1,int x2, int y2 );或或 public void DrawLine( Pen pen, Point pt1, Point pt2 );如:如:Graphics g = this.CreateGraphics( ); Pen p1 = new Pen( Color.Red, 2 ); Point pt1 = new Point( 40,50); Point pt2 = new Point( 220,150); g.DrawLine( p1, 10, 20, 40, 50 ); g.

46、DrawLine( p1, pt1, pt2 );2) DrawLines方法方法public void DrawLines( Pen pen, Point pts );34private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Pen pen = new Pen(Color.Black, 3);Point points = new Point( 10, 10), new Point( 10, 100), new Point(200, 50), new Point(250, 120) ; e.G

47、raphics.DrawLines(pen, points); 效果效果 353. 画椭圆画椭圆1) public void DrawEllipse(Pen pen, int x, int y, int width, int height) 其中其中x, yx, y为椭圆外接矩形左上角的坐标,为椭圆外接矩形左上角的坐标,widthwidth定义椭圆定义椭圆的外接矩形的宽度的外接矩形的宽度,height,height定义椭圆外接矩形的高度。定义椭圆外接矩形的高度。2) public void DrawEllipse(Pen pen, Rectangle rect) 其中其中rectrect为为R

48、ectangleRectangle结构,用于确定椭圆的外接矩形。结构,用于确定椭圆的外接矩形。364. 绘制圆弧绘制圆弧public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle ) 其中其中x, yx, y为椭圆外接矩形左上角的坐标,为椭圆外接矩形左上角的坐标,widthwidth定义椭圆。定义椭圆。 startAngle圆弧起点,圆弧起点, sweepAngle顺时针画过的角度顺时针画过的角度的外接矩形的宽度的外接矩形的宽度,height,height定义

49、椭圆外接矩形的高度。定义椭圆外接矩形的高度。例:例: Graphics g = this.CreateGraphics( );Graphics g = this.CreateGraphics( );Pen pen = new Pen(Color.Red, 2 );Pen pen = new Pen(Color.Red, 2 );g.Clear(this.BackColor);g.Clear(this.BackColor);g.DrawArc(pen,0,0,200,300,-60,180);g.DrawArc(pen,0,0,200,300,-60,180);375. DrawPie(扇形)(

50、扇形)public void DrawPie( Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle )各参数意义:各参数意义:例:例: Graphics g = this.CreateGraphics( );Graphics g = this.CreateGraphics( );Pen pen = new Pen(Color.Red, 2 );Pen pen = new Pen(Color.Red, 2 );g.Clear(this.BackColor);g.Clear(this.BackCo

51、lor);g.DrawPie(pen,60,60,160,160,160,200);g.DrawPie(pen,60,60,160,160,160,200);386. 画矩形画矩形1) public void DrawRectangle(Pen pen, int x, int y, int width, int height)参数含意:参数含意:2) public void DrawRectangle(Pen pen, Rectangle rect)参数含意:参数含意:例:例:private void Form1_Paint(object sender, System.Windows.Form

52、s.PaintEventArgs e)Graphics g = e.Graphics;Pen pen = new Pen( Color.Black, 3);Rectangle rect = new Rectangle( 30, 30, 200, 100);e.Graphics.DrawRectangle( pen, rect );393)3)public void DrawRectangles( Pen pen, Rectangle rects )该方法用于绘制多个矩形。该方法用于绘制多个矩形。例例: :private void Form1_Paint(object sender, Syste

53、m.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;Pen pen = new Pen(Color.Black, 3);Rectangle rects = new Rectangle( 0, 0, 100, 200), new Rectangle(100, 200, 250, 50), new Rectangle(300, 0, 50, 100) ;e.Graphics.DrawRectangles( pen, rects ); 407. Bezier每段贝塞尔曲线都需要四个点,第一个点是起始点,第四个点每段贝塞尔曲线都需要四个点,

54、第一个点是起始点,第四个点是终止点,第二个点和第三个点控制曲线的形状。使用是终止点,第二个点和第三个点控制曲线的形状。使用DrawBezier()DrawBezier()方法绘制一段贝塞尔曲线,使用方法绘制一段贝塞尔曲线,使用DrawBeziers()DrawBeziers()方方法绘制多段贝塞尔曲线。常用形式有:法绘制多段贝塞尔曲线。常用形式有:1) public void DrawBezier( Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4 )2) public

55、 void DrawBezier( Pen pen, Point pt1, Point pt2, Point pt3, Point pt4 )3) public void DrawBeziers( Pen pen, Point points ) 其中其中points是是Point结构的数组,第一段贝塞尔曲线从点数组结构的数组,第一段贝塞尔曲线从点数组中的第一个点到第四个点绘制而成。以后每段曲线只需要三个中的第一个点到第四个点绘制而成。以后每段曲线只需要三个点:两个控制点和一个结束点。前一段曲线的结束点会自动用点:两个控制点和一个结束点。前一段曲线的结束点会自动用作后一段曲线的起始点。作后一段曲

56、线的起始点。 41例例: :private void Form1_Paint( object sender, System.Windows.Forms.PaintEventArgs e)Pen blackPen = new Pen(Color.Black, 3);Point bezierPoints =new Point(50, 100),new Point(100, 10),new Point(150,290),new Point(200, 100),new Point(250,10),new Point(300, 290),new Point(350,100) ; e.Graphics.D

57、rawBeziers( blackPen, bezierPoints ); 428. DrawPolygon(多边形)(多边形)public void DrawPolygon( Pen pen, Point points );public void DrawPolygon( Pen pen, PointF points );其中:其中:PointF表示在二维平面中定义点的、浮点表示在二维平面中定义点的、浮点 x 和和 y 坐标的坐标的有序对有序对 例例:画一个四边形画一个四边形private void button_Click(object sender, System.EventArgs e

58、 ) Graphics g = this.CreateGraphics( ); Pen pen = new Pen( Color.Red, 2 ); g.Clear( this.BackColor ); Point p1 = new Point new Point( 10, 120 ), new Point( 120, 100), new Point( 300,180 ), new Point( 60, 200) ; g.DrawPolygon( pen, p1 );439. DrawClosedCurve方法方法这个方法用平滑的曲线将各节点连接起来,但会自动把首尾节点这个方法用平滑的曲线将各

59、节点连接起来,但会自动把首尾节点连接起来构成封闭曲线。连接起来构成封闭曲线。public void DrawClosedCurve( Pen pen, Point pts );public void DrawClosedCurve( Pen pen, PointF pts );public void DrawClosedCurve( Pen, Point , float, FillMode );public void DrawClosedCurve( Pen, PointF , float, FillMode ); 其中其中floatfloat型型参数参数指定弯曲强度,该值范围为指定弯曲强度,

60、该值范围为0.0f 1.0f,超出此范围会,超出此范围会产生异常,当弯曲强度为零时,就是直线,默认张力为产生异常,当弯曲强度为零时,就是直线,默认张力为0.50.5。例:例:Pen blackPen = new Pen( Color.Black );Point p1 = new Point new Point( 10, 120 ), new Point( 120, 100), new Point( 300,180 ), new Point( 60, 200) ;g.DrawClosedCurve( blackPen, p1 );4410. DrawCurve方法(以四个点画出一条基本曲线)方法

温馨提示

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

评论

0/150

提交评论