第14章图形图像与多媒体编程

上传人:沈*** 文档编号:224300217 上传时间:2023-07-29 格式:PPT 页数:90 大小:1.41MB
收藏 版权申诉 举报 下载
第14章图形图像与多媒体编程_第1页
第1页 / 共90页
第14章图形图像与多媒体编程_第2页
第2页 / 共90页
第14章图形图像与多媒体编程_第3页
第3页 / 共90页
资源描述:

《第14章图形图像与多媒体编程》由会员分享,可在线阅读,更多相关《第14章图形图像与多媒体编程(90页珍藏版)》请在装配图网上搜索。

1、1第十四章第十四章图形图像与多媒体编程图形图像与多媒体编程14.1GDI+概述概述14.2绘制图形绘制图形14.3图像的显示与保存图像的显示与保存14.4动画设计动画设计14.5Web应用程序中的图形图像操作应用程序中的图形图像操作14.6音频与视频播放音频与视频播放214.1GDI+概述概述 GDI+:GraphicsDeviceInterfacePlus,它提供了各种它提供了各种丰富的图形图像处理功能丰富的图形图像处理功能在在C#.NETC#.NET中,使用中,使用GDI+GDI+处理二维(处理二维(2D2D)的图形和图像,的图形和图像,使用使用DirectXDirectX处理三维(处理三

2、维(3D3D)的图形图像。的图形图像。GDI+主要有主要有“二维矢量图形二维矢量图形”、“图像处理图像处理”和和“版式版式”三部分组成。三部分组成。GDI+提供了存储基元自身相关信息的类和结构、存储基提供了存储基元自身相关信息的类和结构、存储基元绘制方式相关信息的类,以及实际进行绘制的类。元绘制方式相关信息的类,以及实际进行绘制的类。GDI+为使用各种字体、字号和样式来显示文本这种复为使用各种字体、字号和样式来显示文本这种复杂任务提供了大量的支持。杂任务提供了大量的支持。其他高级功能其他高级功能3在在C#C#中,所有图形图像处理功能都包含在以下名称空间下:中,所有图形图像处理功能都包含在以下名

3、称空间下:1.System.Drawing1.System.Drawing名称空间名称空间 提供了提供了对对GDI+GDI+基本基本图图形功能的形功能的访问访问,主要有,主要有GraphicsGraphics类类、BitmapBitmap类类、从、从BrushBrush类继类继承的承的类类、FontFont类类、IconIcon类类、ImageImage类类、PenPen类类、ColorColor类类等等。2.System.Drawing.Drawing2D2.System.Drawing.Drawing2D名称空间名称空间 提供了高级的二维和矢量图形功能。主要有梯度型画提供了高级的二维和矢量

4、图形功能。主要有梯度型画刷、刷、MatrixMatrix类(用于定义几何变换)和类(用于定义几何变换)和GraphicsPathGraphicsPath类等。类等。3.System.Drawing.Imaging名称空间名称空间 提供了高级提供了高级GDI+图像处理功能。图像处理功能。4.System.Drawing.Text4.System.Drawing.Text名称空间名称空间 提供了高级提供了高级GDI+字体和文本排版功能字体和文本排版功能414.1.1Graphics类类 GraphicsGraphics类类包包含含在在System.DrawingSystem.Drawing名名称称

5、空空间间下下。要要进进行行图图形形处处理理,必必须须首首先先创创建建GraphicsGraphics对对象象,然然后后才才能能利利用用它它进进行各种画图操作。行各种画图操作。创建创建GraphicsGraphics对象的形式有:对象的形式有:1.1.在窗体或控件的在窗体或控件的PaintPaint事件中直接引用事件中直接引用GraphicsGraphics对象对象 每每一一个个窗窗体体或或控控件件都都有有一一个个PaintPaint事事件件,该该事事件件的的参参数数中中包包含含了了当当前前窗窗体体或或控控件件的的GraphicsGraphics对对象象,在在为为窗窗体体或或控控件件创建绘制代码

6、时,一般使用此方法来获取对图形对象的引用。创建绘制代码时,一般使用此方法来获取对图形对象的引用。Private void Form_Paint(object sender,Private void Form_Paint(object sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graphics;5 2.2.从当前窗体获取对从当前窗体获取对GraphicsGraphics对象的引用对象的引用 把把当当前前窗窗

7、体体的的画画刷刷、字字体体、颜颜色色作作为为缺缺省省值值获获取取对对GraphicsGraphics对对象象的的引引用用,注注意意这这种种对对象象只只有有在在处处理理当当前前WindowsWindows窗窗口口消消息息的的过过程程中中有有效效。如如果果想想在在已已存存在在的的窗窗体体或控件上绘图,可以使用此方法。例如:或控件上绘图,可以使用此方法。例如:Graphics g=Graphics g=this.CreatGraphicsthis.CreatGraphics();();3.3.从从继承自图像的任何对象创建继承自图像的任何对象创建GraphicsGraphics对象。对象。此方法在需要

8、更改已存在的图像时十分有用。此方法在需要更改已存在的图像时十分有用。例如:例如:Bitmap bitmap=new Bitmap(Bitmap bitmap=new Bitmap(C:testa1.bmpC:testa1.bmp););Graphics g=Graphics g=Graphics.FromImage(bitmapGraphics.FromImage(bitmap););614.1.2颜色颜色 颜颜色色是是进进行行图图形形操操作作的的基基本本要要素素。任任何何一一种种颜颜色色都都可可以以由四个分量决定,每个分量占据一个字节:由四个分量决定,每个分量占据一个字节:R R:红色,取值

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

10、对象:使用使用FromArgbFromArgb指定任意颜色指定任意颜色 这这个个方方法法有有两两种种常常用用的的形形式式,第第一一种种形形式式是是直直接接指指定定三三种颜色,方法原型为:种颜色,方法原型为:7 public static Color public static Color FromArgb(intFromArgb(int red,intred,int green,intgreen,int blue)blue)三三个个参参数数分分别别表表示示R R、G G、B B三三色色,AlphaAlpha值值使使用用缺缺省省值值255255,即即完完全全不不透透明。例如:明。例如:Color

11、 red=Color.FromArgb(255,0,0);Color red=Color.FromArgb(255,0,0);Color green=Color.FromArgb(0,255,0);Color green=Color.FromArgb(0,255,0);Color blue=Color.FromArgb(0,0,0 xff);Color blue=Color.FromArgb(0,0,0 xff);其中,其中,0 xff0 xff为十六进制表示形式。为十六进制表示形式。第二种形式使用四个参数,格式为:第二种形式使用四个参数,格式为:public public static st

12、atic Color Color FromArgb(intFromArgb(int alpha,intalpha,int red,intred,int green,intgreen,int blue)blue)四个参数分别表示透明度和四个参数分别表示透明度和R R、G G、B B三色值。三色值。8 使用系统预定义颜色使用系统预定义颜色 在在ColorColor结结构构中中已已经经预预定定义义了了141141种种颜颜色色,可可以以直直接接使使用,例如:用,例如:Color Color myColormyColor;myColormyColor=Color.Red;=Color.Red;myCol

13、ormyColor=Color.Aquamarine;=Color.Aquamarine;myColormyColor=Color.LightGoldenrodYellowColor.LightGoldenrodYellow;914.1.3笔和画刷笔和画刷 在在GDI+GDI+中中,可可使使用用笔笔对对象象和和画画刷刷对对象象呈呈现现图图形形、文文本本和和图图像像。笔笔是是PenPen类类的的实实例例,用用于于绘绘制制线线条条和和空空心心形形状状。画画刷刷是是从从BrushBrush类类派派生生的的任任何何类类的的实实例例,用用于于填填充充形形状状或或绘绘制制文文本。本。1.笔(笔(Pen)笔

14、笔可可用用于于绘绘制制绘绘制制具具有有指指定定宽宽度度和和样样式式的的线线条条、曲曲线线以以及勾勒形状轮廓。及勾勒形状轮廓。下面的示例说明如何创建一支基本的黑色笔:下面的示例说明如何创建一支基本的黑色笔: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

15、=new SolidBrush(Color.RedSolidBrush(Color.Red););Pen Pen myPenmyPen=new =new Pen(myBrushPen(myBrush););Pen Pen myPenmyPen=new =new Pen(myBrushPen(myBrush,5);,5);10笔(笔(PenPen)的用法演示示例。的用法演示示例。1)1)新新建建一一个个WindowsWindows应应用用程程序序,适适当当加加宽宽窗窗体体宽宽度度。然后切换到代码方式,添加名称空间引用:然后切换到代码方式,添加名称空间引用:using System.Drawing

16、.Drawing2D;using System.Drawing.Drawing2D;2)2)添加添加Form1_PaintForm1_Paint事件代码。事件代码。private void Form1_Paint(object sender,private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graphics;Pen pen=new Pen(Color

17、.Blue,10.5f);Pen pen=new Pen(Color.Blue,10.5f);g.DrawStringg.DrawString(蓝色,宽度为蓝色,宽度为10.5,this.Font,10.5,this.Font,new SolidBrush(Color.Black),5,5);new SolidBrush(Color.Black),5,5);g.DrawLine(pen,newg.DrawLine(pen,new Point(110,10),new Point(380,10);Point(110,10),new Point(380,10);pen.Width=2;pen.Wid

18、th=2;pen.Color=Color.Red;pen.Color=Color.Red;g.DrawStringg.DrawString(红色,宽度为红色,宽度为2,this.Font,2,this.Font,new SolidBrush(Color.Black),5,25);new SolidBrush(Color.Black),5,25);11g.DrawLine(pen,newg.DrawLine(pen,new Point(110,30),new Point(380,30);Point(110,30),new Point(380,30);pen.StartCappen.StartCa

19、p=LineCap.FlatLineCap.Flat;pen.EndCappen.EndCap=LineCap.ArrowAnchorLineCap.ArrowAnchor;pen.Width=9;pen.Width=9;g.DrawStringg.DrawString(红色箭头线红色箭头线,this.Font,this.Font,new new SolidBrush(Color.Black),5,45);SolidBrush(Color.Black),5,45);g.DrawLine(pen,newg.DrawLine(pen,new Point(110,50),new Point(380,

20、50);Point(110,50),new Point(380,50);pen.DashStylepen.DashStyle=DashStyle.CustomDashStyle.Custom;pen.DashPatternpen.DashPattern=new float4,4;=new float4,4;pen.Width=2;pen.Width=2;pen.EndCappen.EndCap=LineCap.NoAnchorLineCap.NoAnchor;g.DrawStringg.DrawString(自定义虚线自定义虚线,this.Font,this.Font,new SolidBru

21、sh(Color.Black),5,65);new SolidBrush(Color.Black),5,65);g.DrawLine(pen,newg.DrawLine(pen,new Point(110,40),new Point(380,70);Point(110,40),new Point(380,70);pen.DashStylepen.DashStyle=DashStyle.DotDashStyle.Dot;g.DrawStringg.DrawString(点划线点划线,this.Font,this.Font,new SolidBrush(Color.Black),5,85);new

22、 SolidBrush(Color.Black),5,85);g.DrawLine(pen,newg.DrawLine(pen,new Point(110,90),new Point(380,90);Point(110,90),new Point(380,90);12运行结果运行结果132 2、画刷、画刷(BrushBrush)画画刷刷是是可可与与GraphicsGraphics对对象象一一起起使使用用来来创创建建实实心心形形状状和和呈呈现现文文本本的的对对象象。可可以以用用画画刷刷填填充充各各种种图图形形形形状状,如如矩形、椭圆、扇形、多边形和封闭路径等。矩形、椭圆、扇形、多边形和封闭路径等

23、。几种不同类型的画刷几种不同类型的画刷:SolidBrushSolidBrush 画刷最简单的形式,用纯色进行绘制。画刷最简单的形式,用纯色进行绘制。HatchBrushHatchBrush 类似于类似于 SolidBrushSolidBrush,但是可以利用该类从大量预设但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色。的图案中选择绘制时要使用的图案,而不是纯色。TextureBrushTextureBrush 使用纹理(如图像)进行绘制。使用纹理(如图像)进行绘制。LinearGradientBrushLinearGradientBrush 使用沿渐变混合的两种颜色进行

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

25、圆圆将将符符合合为为其其提提供供的的矩矩形形的的大大小小(此此例例中中为为表表示整个窗体的示整个窗体的ClientRectangleClientRectangle)。)。【例例】单色画刷演示示例。单色画刷演示示例。private void Form1_Paint(object sender,private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graph

26、ics;SolidBrushSolidBrush myBrushmyBrush=new =new SolidBrush(Color.RedSolidBrush(Color.Red););g.FillEllipse(myBrushg.FillEllipse(myBrush,this.ClientRectanglethis.ClientRectangle););15运行效果运行效果16(2)(2)使用使用HatchBrushHatchBrush类绘制简单图案类绘制简单图案 HatchBrushHatchBrush类类用用于于从从大大量量预预设设的的图图案案中中选选择择绘绘制制时时要使用的图案,而不

27、是纯色。要使用的图案,而不是纯色。下下面面的的示示例例说说明明如如何何创创建建一一个个HatchBrushHatchBrush,它它使使用用90%90%的的阴阴影影,前前景景色色与与背背景景色色的的比比例例为为90:10090:100,并并使使用用白白色作为前景色,黑色作为背景色。色作为前景色,黑色作为背景色。【例例】填充简单图案示例。填充简单图案示例。privateprivate voidvoid Form1_Paint(Form1_Paint(objectobject sender,sender,System.Windows.Forms.PaintEventArgsSystem.Windo

28、ws.Forms.PaintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graphics;System.Drawing.Drawing2D.HatchBrush System.Drawing.Drawing2D.HatchBrush aHatchBrushaHatchBrush=newnew System.Drawing.Drawing2D.HatchBrush(System.Drawing.System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.Per

29、cent90,Color.White,Color.Black);Drawing2D.HatchStyle.Percent90,Color.White,Color.Black);g.FillEllipse(aHatchBrushg.FillEllipse(aHatchBrush,thisthis.ClientRectangle.ClientRectangle););17运行效果:运行效果:18(3)(3)使用使用TextureBrushTextureBrush类绘制复杂图案类绘制复杂图案 TextureBrushTextureBrush类类允允许许使使用用一一幅幅图图像像作作为为填填充充的的样样

30、式式。该该类提供了类提供了5 5个重载的构造函数,分别是:个重载的构造函数,分别是:Public Public TextureBrush(ImageTextureBrush(Image)Public Public TextureBrush(Image,RectangleTextureBrush(Image,Rectangle)Public Public TextureBrush(Image,WrapModeTextureBrush(Image,WrapMode)Public Public TextureBrush(Image,Rectangle,ImageAttributesTextureBr

31、ush(Image,Rectangle,ImageAttributes)Public Public TextureBrush(Image,WrapMode,RectangleTextureBrush(Image,WrapMode,Rectangle)其中:其中:ImageImage:ImageImage对象用于指定画笔的填充图案。对象用于指定画笔的填充图案。RectangleRectangle:RectangleRectangle对象用于指定图像上用于画笔的矩形区对象用于指定图像上用于画笔的矩形区 域,其位置不能超越图像的范围。域,其位置不能超越图像的范围。WrapModeWrapMode:W

32、rapModeWrapMode枚举成员用于指定如何排布图像,可以是枚举成员用于指定如何排布图像,可以是 Clamp Clamp 完全由绘制对象的边框决定完全由绘制对象的边框决定 Tile Tile 平铺平铺 TileFlipXTileFlipX 水平方向翻转并平铺图像水平方向翻转并平铺图像 TileFlipYTileFlipY 垂直方向翻转并平铺图像垂直方向翻转并平铺图像 TileFlipXYTileFlipXY 水平和垂直方向翻转并平铺图像水平和垂直方向翻转并平铺图像19 ImageAttributesImageAttributes:ImageAttributesImageAttribute

33、s对象用于指定图像的附加特对象用于指定图像的附加特 性参数。性参数。TextureBrushTextureBrush类有三个属性:类有三个属性:ImageImage:ImageImage类型,与画笔关联的图像对象。类型,与画笔关联的图像对象。TransformTransform:MatrixMatrix类型,画笔的变换矩阵。类型,画笔的变换矩阵。WrapModeWrapMode:WrapModeWrapMode枚举成员,指定图像的排布方式。枚举成员,指定图像的排布方式。下面的示例说明了如何创建一个下面的示例说明了如何创建一个TextureBrush,例子使用例子使用名为名为m23.jpg的图像

34、进行绘制。的图像进行绘制。【例例】创建创建TextureBrushTextureBrush示例。示例。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;TextureBrushTextureBrush myBrushmyBrush=newnew TextureB

35、rush(TextureBrush(newnew Bitmap(e:testm23.jpg);Bitmap(e:testm23.jpg);g.FillEllipse(myBrushg.FillEllipse(myBrush,thisthis.ClientRectangle.ClientRectangle););20运行效果:运行效果:21(4)(4)使用使用LinearGradientBrushLinearGradientBrush类定义线性渐变类定义线性渐变 这这个个类类用用于于定定义义线线性性渐渐变变画画笔笔,可可以以是是双双色色渐渐变变,也也可可以以是是多多色色渐渐变变。缺缺省省情情况况

36、下下,渐渐变变由由起起始始颜颜色色沿沿着着水水平平方方向向平平均均过过渡渡到到终终止止颜颜色色。要要定定义义多多色色渐渐变变,需需要要使使用用InterpolationColorsInterpolationColors属属性性。下下面面的的示示例例说说明明如如何何由由白色渐变到蓝色。白色渐变到蓝色。【例例】线性渐变示例。线性渐变示例。privateprivate voidvoid Form1_Paint(Form1_Paint(objectobject sender,sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.P

37、aintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graphics;System.Drawing.Drawing2D.LinearGradientBrush System.Drawing.Drawing2D.LinearGradientBrush myBrushmyBrush=new new System.Drawing.Drawing2D.LinearGradientBrush(System.Drawing.Drawing2D.LinearGradientBrush(thisthis.ClientRectangle,Color.Whit

38、e.ClientRectangle,Color.White,Color.Blue,Color.Blue,System.Drawing.Drawing2D.LinearGradientMode.Vertical);System.Drawing.Drawing2D.LinearGradientMode.Vertical);g.FillRectangle(myBrushg.FillRectangle(myBrush,thisthis.ClientRectangle.ClientRectangle););22 如果创建应用程序后向设计窗体上拖放一些控件,如果创建应用程序后向设计窗体上拖放一些控件,可以

39、看到运行后该图就是一个漂亮的背景了。可以看到运行后该图就是一个漂亮的背景了。23(5)(5)使用使用PathGradientBrushPathGradientBrush类实现彩色渐变类实现彩色渐变 在在GDI+GDI+中中,把把一一个个或或多多个个图图形形组组成成的的形形体体称称作作路路径径。可可以以使使用用GraphicsPathGraphicsPath类类定定义义路路径径,使使用用PathGradientBrushPathGradientBrush类类定定义义路路径径内内部部的的渐渐变变色色画画笔笔。渐渐变变色色从从路路径径内内部部的的中中心心点点逐渐过渡到路径的外边界边缘。逐渐过渡到路径

40、的外边界边缘。PathGradientBrushPathGradientBrush类有三种形式的构造函数,形式之一是:类有三种形式的构造函数,形式之一是:public public PathGradientBrush(GraphicsPathPathGradientBrush(GraphicsPath path)path)其中,其中,GraphicsPathGraphicsPath定义画笔填充的区域。定义画笔填充的区域。【例例】路径和路径画笔的使用。路径和路径画笔的使用。using System.Drawing.Drawing2D;using System.Drawing.Drawing2D;

41、24private void Form1_Paint(object sender,private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Graphics g=e.Graphics;Graphics g=e.Graphics;Point Point centerPointcenterPoint=new Point(150,100);=new Point(150,100);intint R=60;R=60;GraphicsPa

42、thGraphicsPath path=new path=new GraphicsPathGraphicsPath();();path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R);path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R);PathGradientBrushPathGradientBrush brush=new brush=new PathGradientBrush(pathPathGradientBrush(path););/指定路径中心点指定路径中心点brush

43、.CenterPointbrush.CenterPoint=centerPointcenterPoint;/指定路径中心点的颜色指定路径中心点的颜色brush.CenterColorbrush.CenterColor=Color.Red;=Color.Red;/Color/Color类型的数组指定与路径上每个顶点对应的颜色类型的数组指定与路径上每个顶点对应的颜色brush.SurroundColorsbrush.SurroundColors=new Color Color.Plum;=new Color Color.Plum;25 g.FillEllipse(brush,centerPoint

44、.X-R,centerPoint.Y-Rg.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R,2*R,2*R);2*R,2*R);centerPointcenterPoint=new Point(350,100);=new Point(350,100);R=20;R=20;path=new path=new GraphicsPathGraphicsPath();();path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R);path.AddEllipse(centerPoint.X-R,c

45、enterPoint.Y-R,2*R,2*R);path.AddEllipse(centerPoint.X-2*R,centerPoint.Y-2*R,path.AddEllipse(centerPoint.X-2*R,centerPoint.Y-2*R,4*R,4*R);4*R,4*R);path.AddEllipse(centerPoint.X-3*R,centerPoint.Y-3*R,path.AddEllipse(centerPoint.X-3*R,centerPoint.Y-3*R,6*R,6*R);6*R,6*R);brush=new brush=new PathGradient

46、Brush(pathPathGradientBrush(path););brush.CenterPointbrush.CenterPoint=centerPointcenterPoint;brush.CenterColorbrush.CenterColor=Color.Red;=Color.Red;brush.SurroundColorsbrush.SurroundColors=new=new Color Color.Black,Color.Blue,Color.Green;Color Color.Black,Color.Blue,Color.Green;g.FillPath(brush,pa

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

48、slateTransform()()方方法法、RotateTransformRotateTransform()()方方法法和和ScaleTransformScaleTransform()()方方法法,分分别别用用于于图图形形图图像像的的平平移移、旋旋转和缩放。转和缩放。TranslateTransformTranslateTransform()()方法的形式为:方法的形式为:public void public void TranslateTransform(floatTranslateTransform(float dx,floatdx,float dydy)其中,其中,dxdx表示平移的表

49、示平移的x x分量,分量,dydy表示平移的表示平移的y y分量。分量。RotateTransformRotateTransform()()方法的形式为:方法的形式为:public void public void RotateTransform(floatRotateTransform(float angle)angle)其中,其中,angleangle表示旋转角度。表示旋转角度。ScaleTransformScaleTransform()()方法的形式为:方法的形式为:public void public void ScaleTransform(floatScaleTransform(fl

50、oat sx,floatsx,float sysy)其中,其中,sx表示表示x方向的缩放比例,方向的缩放比例,sy表示表示y方向的缩放比例。方向的缩放比例。28【例例】三种变换方法示例。三种变换方法示例。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;/椭圆透

51、明度椭圆透明度80%80%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);g.RotateTransform(30.0f);g.RotateTransform(30.0f);/顺时针旋转顺时针旋转1010度度g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.FromArgb(80,Color.Blu

52、e),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(newnew SolidBrush(Color.FromArgb(50,Color.Green),SolidBrush(Col

53、or.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(newnewSolidBrush(Color.FromArgb(100,Color.Red),SolidBrush(Color.FromArgb(100,Color.Red),120,30,200,100);120,30,200,100);293014.2绘制图形绘制图形 所有绘制图形的

54、方法都位于所有绘制图形的方法都位于GraphicsGraphics中。中。14.2.1直线直线 有两种绘制直线的方法:有两种绘制直线的方法:DrawLineDrawLine()()方法和方法和DrawLinesDrawLines()()方法。方法。DrawLineDrawLine()()用用于于绘绘制制一一条条直直线线,DrawLinesDrawLines()()用用于于绘绘制制多多条条直直线线。常常用形式有:用形式有:public void public void DrawLine(PenDrawLine(Pen pen,Point pt1,Point pt2)pen,Point pt1,P

55、oint pt2)其其中中PenPen对对象象确确定定线线条条的的颜颜色色、宽宽度度和和样样式式。PointPoint结结构构确确定定起起点点和和终终点。例如:点。例如: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;Pen Pen blackPenblack

56、Pen=newnew Pen(Color.Black,3);Pen(Color.Black,3);Point point1=Point point1=newnew Point(100,100);Point(100,100);Point point2=Point point2=newnew Point(200,100);Point(200,100);e.Graphics.DrawLine(blackPene.Graphics.DrawLine(blackPen,point1,point2);,point1,point2);31 public void public void DrawLine(P

57、enDrawLine(Pen pen,intpen,int x1,int y1,int x2,int y2)x1,int y1,int x2,int y2)其中其中x1,y1x1,y1为起点坐标,为起点坐标,x2,y2x2,y2为终点坐标。例如:为终点坐标。例如:e.Graphics.DrawLine(blackPene.Graphics.DrawLine(blackPen,100,100,200,100);,100,100,200,100);public void public void DrawLines(PenDrawLines(Pen pen,Point points)pen,Poin

58、t points)这种方法用于绘制一系列连接一组终结点的线条。数组中的前两个这种方法用于绘制一系列连接一组终结点的线条。数组中的前两个点指定第一条线。每个附加点指定一个线段的终结点,该线段的起点指定第一条线。每个附加点指定一个线段的终结点,该线段的起始点是前一条线段的结束点。始点是前一条线段的结束点。privateprivate voidvoid Form1_Paint(Form1_Paint(objectobject sender,sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e

59、)Graphics g=e.Graphics;Graphics g=e.Graphics;Pen pen=Pen pen=newnew Pen(Color.Black,3);Pen(Color.Black,3);Point points=Point points=newnew Point(10,10),Point(10,10),newnew Point(10,100),Point(10,100),newnew Point(200,50),Point(200,50),newnew Point(250,120)Point(250,120);e.Graphics.DrawLines(pene.Gra

60、phics.DrawLines(pen,points);,points);32效果效果3314.2.2矩形矩形 由由于于矩矩形形具具有有轮轮廓廓和和封封闭闭区区域域,所所以以C#C#提提供供了了两两类类绘绘制制矩矩形形的的方方法法,一一类类用用于于绘绘制制矩矩形形的的轮轮廓廓,另另一一类类用用于于填充矩形的封闭区域。填充矩形的封闭区域。使使用用DrawRectangleDrawRectangle()()或或DrawRectanglesDrawRectangles()()方方法法绘绘制制矩矩形轮廓的常用形式有:形轮廓的常用形式有:public public void void DrawRecta

61、ngle(PenDrawRectangle(Pen pen,pen,Rectangle Rectangle rectrect)其中其中rectrect表示要绘制的矩形的表示要绘制的矩形的RectangleRectangle结构。结构。【例例】绘制矩形轮廓示例。绘制矩形轮廓示例。privateprivate voidvoid Form1_Paint(Form1_Paint(objectobject sender,sender,System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e)e)Graphics g=

62、e.Graphics;Graphics g=e.Graphics;Pen pen=Pen pen=newnew Pen(Color.Black,3);Pen(Color.Black,3);Rectangle Rectangle rectrect=newnew Rectangle(30,30,200,100);Rectangle(30,30,200,100);e.Graphics.DrawRectangle(pene.Graphics.DrawRectangle(pen,rectrect););34 public public void void DrawRectangle(PenDrawRec

63、tangle(Pen pen,pen,intint x,x,intint y,y,intint width,width,intint height)height)其中其中x,yx,y为矩形左上角坐标值。例如:为矩形左上角坐标值。例如:e.Graphics.DrawRectangle(pene.Graphics.DrawRectangle(pen,20,20,200,100);,20,20,200,100);public void public void DrawRectangles(PenDrawRectangles(Pen pen,Rectangle pen,Rectangle rectsr

64、ects)该方法用于绘制多个矩形。该方法用于绘制多个矩形。【例例】使用使用DrawRectanglesDrawRectangles方法绘制矩形轮廓示例。方法绘制矩形轮廓示例。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;Pen pen=Pen pen=new

65、new Pen(Color.Black,3);Pen(Color.Black,3);Rectangle Rectangle rectsrects=newnew Rectangle(0,0,100,200),Rectangle(0,0,100,200),newnew Rectangle(100,200,250,50),Rectangle(100,200,250,50),newnew Rectangle(300,0,50,100)Rectangle(300,0,50,100);e.Graphics.DrawRectangles(pene.Graphics.DrawRectangles(pen,re

66、ctsrects););353614.2.3多边形多边形 由由于于多多边边形形也也是是封封闭闭的的,所所以以C#C#中中也也有有两两种种绘绘制制方方法法:使使 用用 DrawPolygonDrawPolygon()()方方 法法 绘绘 制制 多多 边边 形形 轮轮 廓廓,使使 用用 FillPolygonFillPolygon()()方法填充多边形的封闭区域。方法填充多边形的封闭区域。下面的例子说明了这些方法的使用形式。下面的例子说明了这些方法的使用形式。【例例】绘制多边形示例。绘制多边形示例。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;Pen pen=Pen pen=newnew Pen(Color.Red);Pen(Color.Red);Poi

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