C_图形程序设计基础

上传人:ca****in 文档编号:231528047 上传时间:2023-09-04 格式:PPT 页数:58 大小:414.50KB
收藏 版权申诉 举报 下载
C_图形程序设计基础_第1页
第1页 / 共58页
C_图形程序设计基础_第2页
第2页 / 共58页
C_图形程序设计基础_第3页
第3页 / 共58页
资源描述:

《C_图形程序设计基础》由会员分享,可在线阅读,更多相关《C_图形程序设计基础(58页珍藏版)》请在装配图网上搜索。

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

2、DI+提供了存储基元自身相关信息的类和结构、存储基元提供了存储基元自身相关信息的类和结构、存储基元绘制方式相关信息的类,以及实际进行绘制的类绘制方式相关信息的类,以及实际进行绘制的类 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对象,对象,在为在为窗体或窗体或控件创建绘控件创建绘制代码时,一般使用此方法来获取对图形对象的引用:制代码时,一般使用此方法来获取对图形对象的引用:Private void

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

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

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

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

10、0 0255255,255255为饱和蓝色为饱和蓝色 A A:AlphaAlpha值值,即即透透明明度度。取取值值范范围围0 0255255,0 0为为完完全全透透明明,255255为完全不透明为完全不透明在在System.System.DrawingDrawing名名称称空空间间下下,有有一一个个ColorColor结结构构类类型型,包包含含系系统已定义的颜色种类。统已定义的颜色种类。可以使用下列方法创建颜色对象:可以使用下列方法创建颜色对象:使用使用FromArgbFromArgb指定任意颜色指定任意颜色 这个方法有两种常用的形式:这个方法有两种常用的形式:8第一种形式是直接指定三种颜色,

11、方法原型为:第一种形式是直接指定三种颜色,方法原型为: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(0,255,0);Color blue=Color.FromArgb(0,0,0 xff);其中,其中,0 xff0 xff为十六进制表示形式。为

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

13、ghtGoldenrodYellow;101.3 创建画笔对象创建画笔对象用用PenPen类创建画笔对象,画笔通常具有宽度、样式和颜色三种属类创建画笔对象,画笔通常具有宽度、样式和颜色三种属性。性。1.Pen1.Pen对象的创建:对象的创建:public Pen(Color color);public Pen(Color color);public Pen(Color color,float width);public Pen(Color color,float width);public Pen(Brush brush);public Pen(Brush brush);public Pen(

14、Brush brush,float width);public Pen(Brush brush,float width);如:如:Pen Pen myPenmyPen=new Pen(Color.Black);=new Pen(Color.Black);Pen Pen myPenmyPen=new Pen(Color.Black,5);=new Pen(Color.Black,5);SolidBrushSolidBrush myBrushmyBrush=new =new SolidBrushSolidBrush(Color.Red);(Color.Red);Pen Pen myPenmyPen

15、=new Pen(=new Pen(myBrushmyBrush););Pen Pen myPenmyPen=new Pen(=new Pen(myBrushmyBrush,5);,5);112.Pen2.Pen对象的属性:对象的属性:画笔对象的属性用于返回或设置画笔对象的颜色、画线样式、画笔对象的属性用于返回或设置画笔对象的颜色、画线样式、画线始点及终点的样式等。常用属性如下:画线始点及终点的样式等。常用属性如下:Color:Color:DashCapDashCap:DashStyleDashStyle:EndCapEndCap:PenTypePenType:StartCapStartCap

16、:Width:Width:例:例:121)1)新新建建一一个个WindowsWindows应应用用程程序序,适适当当加加宽宽窗窗体体宽宽度度。然然后后切换到代码方式,添加名称空间引用:切换到代码方式,添加名称空间引用:using System.Drawing.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

17、.Blue,10.5f);g.DrawString(蓝色,宽度为蓝色,宽度为10.5,this.Font,new SolidBrush(Color.Black),5,5);g.DrawLine(pen,new Point(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.S

18、tartCap=LineCap.Flat;pen.EndCap=LineCap.ArrowAnchor;pen.Width=9;g.DrawString(红色箭头线红色箭头线,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(自定义

19、虚线自定义虚线,this.Font,new SolidBrush(Color.Black),5,65);g.DrawLine(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对象一

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

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

22、说明如何在窗体上绘制一个纯红色的椭圆。该椭圆将符合为其提供的矩形的大小(此例中为表示整个该椭圆将符合为其提供的矩形的大小(此例中为表示整个窗体的窗体的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);

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

24、Paint(object 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类

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

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

27、pXYTileFlipXY 水平和垂直方向翻转并平铺图像水平和垂直方向翻转并平铺图像21 ImageAttributesImageAttributes:用于指定图像的附加特性参数。用于指定图像的附加特性参数。TextureBrushTextureBrush类有三个属性:类有三个属性:ImageImage:ImageImage类型,与画笔关联的图像对象。类型,与画笔关联的图像对象。TransformTransform:MatrixMatrix类型,画笔的变换矩阵。类型,画笔的变换矩阵。WrapModeWrapMode:WrapModeWrapMode枚举成员,指定图像的排布方式。枚举成员,指定图

28、像的排布方式。下面的示例说明了如何创建一个下面的示例说明了如何创建一个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.FillEllipse(myBrush,this.ClientRectangle);22运行效果:

29、运行效果:23(4)(4)使用使用LinearGradientBrushLinearGradientBrush类定义线性渐变类定义线性渐变 这个类用于定义线性渐变画笔,可以是双色渐变,也可这个类用于定义线性渐变画笔,可以是双色渐变,也可以是多色渐变。缺省情况下,渐变由起始颜色沿着水平方以是多色渐变。缺省情况下,渐变由起始颜色沿着水平方向平均过渡到终止颜色。要定义多色渐变,需要使用向平均过渡到终止颜色。要定义多色渐变,需要使用InterpolationColorsInterpolationColors属性。下面的示例说明如何由白色渐属性。下面的示例说明如何由白色渐变到蓝色。变到蓝色。例例:pri

30、vate 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(myBrush,this.ClientRectangle);24 如果创建应用程序后向设计窗体上拖放一些控件,如果创建应用程序

31、后向设计窗体上拖放一些控件,可以看到运行后该图就是一个漂亮的背景了。可以看到运行后该图就是一个漂亮的背景了。25(5)(5)使用使用PathGradientBrushPathGradientBrush类实现彩色渐变类实现彩色渐变 在在GDI+GDI+中,把一个或多个图形组成的形体称作路径。可以中,把一个或多个图形组成的形体称作路径。可以使用使用GraphicsPathGraphicsPath类定义路径,使用类定义路径,使用PathGradientBrushPathGradientBrush类定类定义路径内部的渐变色画笔。渐变色从路径内部的中心点逐渐过义路径内部的渐变色画笔。渐变色从路径内部的中

32、心点逐渐过渡到路径的外边界边缘。渡到路径的外边界边缘。PathGradientBrushPathGradientBrush类有三种形式的构造函数,形式之一是:类有三种形式的构造函数,形式之一是:public PathGradientBrush(GraphicsPath path)其中,其中,GraphicsPathGraphicsPath定义画笔填充的区域。定义画笔填充的区域。例例,路径和路径画笔的使用路径和路径画笔的使用:using System.Drawing.Drawing2D;using System.Drawing.Drawing2D;26private void Form1_Pai

33、nt(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);PathGradientBrush brush=new PathGradientBrush(path);/指定路径中心点指定路径中心点brush.CenterPoi

34、nt=centerPoint;/指定路径中心点的颜色指定路径中心点的颜色brush.CenterColor=Color.Red;/Color类型的数组指定与路径上每个顶点对应的颜色类型的数组指定与路径上每个顶点对应的颜色brush.SurroundColors=new Color Color.Plum;27 g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R,2*R,2*R);centerPoint=new Point(350,100);R=20;path=new GraphicsPath();path.AddEllipse(centerPo

35、int.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=centerPoint;brush.CenterColor=Color.Red;brush.SurroundColors=new Color Color.Black,Color.Blue

36、,Color.Green;g.FillPath(brush,path);28 在这个例子中,可以看到当使用在这个例子中,可以看到当使用FillPathFillPath()()方法填充路径的时方法填充路径的时候,如果多个图形互相重叠,则重叠部分的数目为偶数时不会被填候,如果多个图形互相重叠,则重叠部分的数目为偶数时不会被填充,因此右图中间部分仍为背景色而不是蓝色。充,因此右图中间部分仍为背景色而不是蓝色。29附附:平移、旋转与缩放平移、旋转与缩放 GraphicsGraphics类提供了三种对图像进行几何变换的方法,它们类提供了三种对图像进行几何变换的方法,它们是是TranslateTransf

37、ormTranslateTransform()()方法、方法、RotateTransformRotateTransform()()方法和方法和ScaleTransformScaleTransform()()方法,分别用于图形图像的平移、旋转和方法,分别用于图形图像的平移、旋转和缩放(以坐标系原点为中心)。缩放(以坐标系原点为中心)。TranslateTransformTranslateTransform()()方法的形式为:方法的形式为:public void TranslateTransform(float dx,float dy)其中,其中,dxdx表示平移的表示平移的x x分量,分量,d

38、ydy表示平移的表示平移的y y分量分量;RotateTransformRotateTransform()()方法的形式为:方法的形式为:public void RotateTransform(float angle)其中,其中,angleangle表示旋转角度表示旋转角度;ScaleTransformScaleTransform()()方法的形式为:方法的形式为:public void ScaleTransform(float sx,float sy)其中,其中,sx表示表示x方向的缩放比例,方向的缩放比例,sy表示表示y方向的缩放比例方向的缩放比例;30例:三种变换方法示例。例:三种变换方

39、法示例。privateprivate voidvoid Form1_Paint(Form1_Paint(objectobject sender,sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graphics;g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.FromArgbSolidBrush(Color.FromArgb(80,Color.Red),(8

40、0,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(newnew SolidBrush(Color.FromArgb(80,Color.Blue),SolidBrush(Color.FromArgb(80,Color.Blue),120,30,200,100);120,30,200,100);/水平方向向右平移水平方向向右平移20020

41、0个像素,垂直方向向上平移个像素,垂直方向向上平移100100个像素个像素g.TranslateTransform(200.0f,-100.0f);g.TranslateTransform(200.0f,-100.0f);g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.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.ScaleTra

42、nsform(0.5f,0.5f);/缩小到一半缩小到一半 g.FillEllipse(g.FillEllipse(newnewSolidBrush(Color.FromArgb(100,Color.Red),SolidBrush(Color.FromArgb(100,Color.Red),120,30,200,100);120,30,200,100);31322 基本图形的绘制基本图形的绘制1.画点画点C#采用采用Point结构和结构和SetPixel()方法完成画点的功能;其中方法完成画点的功能;其中Point用于图形设计,用于图形设计,SetPixel()用于图像处理用于图像处理Poin

43、t原型:原型:public struct Point;使用:使用:public Point p1=new Point();每个点结构有每个点结构有x和和y两个属性,表示横纵坐标,如:两个属性,表示横纵坐标,如:p1.x=30;p1.y=100;332.画直线画直线1)DrawLine方法方法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

44、=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.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

45、points=new Point(10,10),new Point(10,100),new Point(200,50),new Point(250,120);e.Graphics.DrawLines(pen,points);效果效果 353.画椭圆画椭圆1)public void DrawEllipse(Pen pen,int x,int y,int width,int height)其中其中x,yx,y为椭圆外接矩形左上角的坐标,为椭圆外接矩形左上角的坐标,widthwidth定义椭圆定义椭圆的外接矩形的宽度的外接矩形的宽度,height,height定义椭圆外接矩形的高度。定义椭圆外接矩形

46、的高度。2)public void DrawEllipse(Pen pen,Rectangle rect)其中其中rectrect为为RectangleRectangle结构,用于确定椭圆的外接矩形。结构,用于确定椭圆的外接矩形。364.绘制圆弧绘制圆弧public void DrawArc(Pen pen,int x,int y,int width,int height,int startAngle,int sweepAngle)其中其中x,yx,y为椭圆外接矩形左上角的坐标,为椭圆外接矩形左上角的坐标,widthwidth定义椭圆。定义椭圆。startAngle圆弧起点,圆弧起点,swee

47、pAngle顺时针画过的角度顺时针画过的角度的外接矩形的宽度的外接矩形的宽度,height,height定义椭圆外接矩形的高度。定义椭圆外接矩形的高度。例:例:Graphics g=Graphics g=this.CreateGraphicsthis.CreateGraphics();();Pen pen=new Pen(Color.Red,2);Pen pen=new Pen(Color.Red,2);g.Clear(this.BackColorg.Clear(this.BackColor););g.DrawArc(pen,0,0,200,300,-60,180);g.DrawArc(pen

48、,0,0,200,300,-60,180);375.DrawPie(扇形)扇形)public void DrawPie(Pen pen,int x,int y,int width,int height,int startAngle,int sweepAngle)各参数意义:各参数意义:例:例:Graphics g=Graphics g=this.CreateGraphicsthis.CreateGraphics();();Pen pen=new Pen(Color.Red,2);Pen pen=new Pen(Color.Red,2);g.Clear(this.BackColorg.Clear

49、(this.BackColor););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

50、.Forms.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,System.Windows.Forms.

51、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每段贝塞尔曲线都需要四个点,第一个点是起始点,第四个点每段贝塞尔曲线都需要四个点,第一个点是起始点,第四个点是终止点,第二个点和第三个点控制曲线的形状。使用是终止点

52、,第二个点和第三个点控制曲线的形状。使用DrawBezierDrawBezier()()方法绘制一段贝塞尔曲线,使用方法绘制一段贝塞尔曲线,使用DrawBeziersDrawBeziers()()方方法绘制多段贝塞尔曲线。常用形式有:法绘制多段贝塞尔曲线。常用形式有:1)public void DrawBezier(Pen pen,float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)2)public void DrawBezier(Pen pen,Point pt1,Point pt2,Point pt

53、3,Point pt4)3)public void DrawBeziers(Pen pen,Point points)其中其中points是是Point结构的数组,第一段贝塞尔曲线从点数组结构的数组,第一段贝塞尔曲线从点数组中的第一个点到第四个点绘制而成。以后每段曲线只需要三个中的第一个点到第四个点绘制而成。以后每段曲线只需要三个点:两个控制点和一个结束点。前一段曲线的结束点会自动用点:两个控制点和一个结束点。前一段曲线的结束点会自动用作后一段曲线的起始点。作后一段曲线的起始点。41例例:private void Form1_Paint(object sender,System.Windows

54、.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.DrawBeziers(blackPen,bezierPoints);428.DrawPolygon(多边形)多边形)1)public void DrawPol

55、ygon(Pen pen,Point points);2)public void DrawPolygon(Pen pen,PointF points);其中:其中:PointF表示在二维平面中定义点的、浮点表示在二维平面中定义点的、浮点 x 和和 y 坐标的坐标的有序对有序对 例例:画一个四边形画一个四边形private void button_Click(object sender,System.EventArgs e)Graphics g=this.CreateGraphics();Pen pen=new Pen(Color.Red,2);g.Clear(this.BackColor);P

56、oint 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方法方法这个方法用平滑的曲线将各节点连接起来,但会自动把首尾节点这个方法用平滑的曲线将各节点连接起来,但会自动把首尾节点连接起来构成封闭曲线。连接起来构成封闭曲线。1)public void DrawClosedCurve(Pen pen,Point pts);2)public void DrawClosedCurve(Pen pe

57、n,PointF pts);3)public void DrawClosedCurve(Pen,Point,float,FillMode);4)public void DrawClosedCurve(Pen,PointF,float,FillMode);其中其中floatfloat型型参数参数指定弯曲强度,该值范围为指定弯曲强度,该值范围为0.0f 1.0f,超出此范围会超出此范围会产生异常,当弯曲强度为零时,就是直线,默认张力为产生异常,当弯曲强度为零时,就是直线,默认张力为0.50.5。例:例:Pen blackPen=new Pen(Color.Black);Point p1=new P

58、oint new Point(10,120),new Point(120,100),new Point(300,180),new Point(60,200);g.DrawClosedCurve(blackPen,p1);4410.DrawCurve方法(以四个点画出一条基本曲线)方法(以四个点画出一条基本曲线)绘制经过一组指定的绘制经过一组指定的PointPoint结构数组定义的曲线,最后一个点与结构数组定义的曲线,最后一个点与第一个点间不画线。第一个点间不画线。1)public void DrawCurve(Pen pen,Point pts);2)public void DrawCurve

59、(Pen pen,PointF pts);3)public void DrawCurve(Pen,Point,float);4)public void DrawCurve(Pen,PointF,float);其中其中float参数代表曲线弯曲的强度。参数代表曲线弯曲的强度。例:例:private void button_Click(object sender,System.EventArgs e)Graphics g=this.CreateGraphics();g.Clear(this.BackColor);Pen blackPen=new Pen(Color.Black,3);Point p

60、1=new Point new Point(10,120),new Point(120,100),new Point(300,180),new Point(60,200);g.DrawCurve(blackPen,p1);45例:绘制直线与平滑曲线例:绘制直线与平滑曲线privateprivate voidvoid Form1_Paint(Form1_Paint(objectobject sender,sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Pen Pen redPenr

61、edPen =newnew Pen(Color.Red,3);Pen(Color.Red,3);Pen Pen greenPengreenPen=newnew Pen(Color.Green,3);Pen(Color.Green,3);Point Point curvePointscurvePoints=newnew Point(50,250),Point(50,250),newnew Point(100,25),Point(100,25),newnew Point(200,250),Point(200,250),newnew Point(250,50),Point(250,50),newne

62、w Point(300,75),Point(300,75),newnew Point(350,200),Point(350,200),newnew Point(400,150)Point(400,150);e.Graphics.DrawLines(redPene.Graphics.DrawLines(redPen,curvePointscurvePoints););e.Graphics.DrawCurve(greenPene.Graphics.DrawCurve(greenPen,curvePointscurvePoints););4611.DrawPath方法方法路径通过组合直线、矩形和简单

63、的曲线形成的,可通过路径通过组合直线、矩形和简单的曲线形成的,可通过GraphicsGraphics类的类的DrawPathDrawPath方法来绘制整个路径的各个对象。方法来绘制整个路径的各个对象。public void DrawPath(Pen pen,GraphicsPath path);例例:private void button_Click(object sender,System.EventArgs e)Graphics g=this.CreateGraphics();GraphicsPath graphPath=new GraphicsPath();graphPath.AddEl

64、lipse(0,0,200,100);graphPath.AddRectangle(new Rectangle(100,80,200,100);graphPath.AddBezier(30,60,70,60,50,30,100,10);Pen blackPen=new Pen(Color.Black,3);g.DrawPath(blackPen,graphPath);4712.FillEllipse该方法用于画一个填充椭圆,常用格式有:该方法用于画一个填充椭圆,常用格式有:1)public void FillEllipse(Brush brush,int x,int y,int width,i

65、nt height);2)public void FillEllipse(Brush brush,RectangleF rect);参数意义:参数意义:例例:private void button_Click(object sender,System.EventArgs e)Graphics g=this.CreateGraphics();g.Clear(this.BackColor);Brush sp=new SolidBrush(Color.Red);g.FillEllipse(sp,80,90,200,100);4813.FillRectangle该方法用于画一个填充矩形,常用格式有:该

66、方法用于画一个填充矩形,常用格式有:1)public void FillRectangle(Brush brush,int x,int y,int width,int height);2)public void FillRectangle(Brush brush,Rectangle rect);参数意义:参数意义:例例:private void button_Click(object sender,System.EventArgs e)Graphics g=this.CreateGraphics();g.Clear(this.BackColor);Brush sp=new SolidBrush(Color.Red);g.FillRectangle(sp,80,90,200,100);4914.FillPie该方法用于画一个填充饼图,常用格式有:该方法用于画一个填充饼图,常用格式有:1)public void FillPie(Brush brush,int x,int y,int width,int height,int startAngle,int sweepAngle);2)publ

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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