二维图形图像处理_第1页
二维图形图像处理_第2页
二维图形图像处理_第3页
二维图形图像处理_第4页
二维图形图像处理_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第9章章 二维图形图像处理二维图形图像处理9.1 GDI+概述概述 9.2 绘制基本图形绘制基本图形 9.3 图像处理图像处理29.1 GDI+概述概述 GDI+:Graphics Device Interface (图形设图形设备接口备接口),它提供了高级图形图像处理功能,它提供了高级图形图像处理功能 在在C#中,通过一套部署为托管代码的类来中,通过一套部署为托管代码的类来展现提供的图展现提供的图 形图像处理功能,这套类被称为形图像处理功能,这套类被称为GDI+的托管类。利用的托管类。利用 GDI+可以轻松实现颜色可以轻松实现颜色渐变、透明处理、纹理处理、拉伸和缩放等多种渐变、透明处理、

2、纹理处理、拉伸和缩放等多种高级功能。高级功能。3GDI+主要提供了三类服务:主要提供了三类服务: 1.二维矢量图形二维矢量图形 2.图像处理图像处理 3.文字显示文字显示4 在在C#C#中,所有图形图像处理功能都包含在以下中,所有图形图像处理功能都包含在以下名称空间下:名称空间下: 1.1.System.Drawing名称空间名称空间 提供了对提供了对GDI+GDI+基本图形功能的访问,主要基本图形功能的访问,主要有有GraphicsGraphics类、类、BitmapBitmap类、从类、从BrushBrush类继承的类、类继承的类、FontFont类、类、IconIcon类、类、Image

3、Image类、类、PenPen类、类、ColorColor类等。类等。9.1 GDI+概述(续)概述(续)52.System.Drawing.Drawing2D名称空间名称空间 提供了高级的二维和矢量图形功能。主要提供了高级的二维和矢量图形功能。主要有:梯度型画刷、有:梯度型画刷、MatrixMatrix类(用于定义几何变类(用于定义几何变换)和换)和GraphicsPathGraphicsPath类等。类等。 63.System.Drawing.Imaging名称空间名称空间 提供了高级提供了高级 图像处理功能。图像处理功能。 4.4.System.Drawing.Text名称空间名称空间

4、提供了高级提供了高级 字体和文本排版功能字体和文本排版功能 79.1 .1 GDI+使用的坐标系使用的坐标系1. GDI+坐标系中的基本结构坐标系中的基本结构Point表示某个特定位置相对于原点的水平和垂直距离。例表示某个特定位置相对于原点的水平和垂直距离。例如:如: Point p = new Point (1,1);Size也有两个整型属性来表示水平和垂直距离也有两个整型属性来表示水平和垂直距离Width和和Height。例如:。例如: Size s = new Size (5,5);Rectangle是用来指定矩形的坐标的,它由一个是用来指定矩形的坐标的,它由一个Point和一个和一个S

5、ize 组成,其中组成,其中Point表示矩形左上角,表示矩形左上角,Size表示矩形大表示矩形大小。小。89.1 .1 GDI+使用的坐标系使用的坐标系( (续续) )例如:例如: 1) 在构造函数中分别指定在构造函数中分别指定x坐标、坐标、y坐标、宽坐标、宽度和高度。度和高度。 Rectangle r1 = new Rectangle (1,2,5,6); 2) 在构造函数中指定在构造函数中指定Point位置和位置和Size结构。结构。 Point p = new Point (1,2); Size s = new Size (5,6); Rectangle r2 = new Rectan

6、gle (p, s);99.1 .1 GDI+使用的坐标系使用的坐标系( (续续) )2.GDI+中坐标系的分类中坐标系的分类世界坐标系世界坐标系设备坐标系设备坐标系页面坐标系页面坐标系109.1 .1 GDI+使用的坐标系(续)使用的坐标系(续)【例【例 9-1】不同坐标系之间的转换示例】不同坐标系之间的转换示例 private void Form1_Paint(object sender, PaintEventArgs e) Graphics myGraphics = e.Graphics; myGraphics.TranslateTransform(0.5F, 0.5F); myGrap

7、hics.PageUnit = GraphicsUnit.Inch; Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX); myGraphics.DrawLine(myPen, 0, 0, 2, 2); 119.1.2 Graphics类类 Graphics类包含在类包含在System.Drawing名称空间下,它提供了名称空间下,它提供了简单的图形图像处理功能。在绘制图形图像前,首先必须创建简单的图形图像处理功能。在绘制图形图像前,首先必须创建Graphics对象,然后利用这个对象绘制直线、曲线、椭圆等图对象,然后利用这个对象绘制直线、

8、曲线、椭圆等图形图像。形图像。 12有三种常见的创建有三种常见的创建Graphics对象的方法。对象的方法。 1.在窗体或控件的在窗体或控件的Paint事件中获取事件中获取Graphics对对象。例如:象。例如: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; 132.通过当前窗体的通过当前窗体的CreateGraphics方法,把当前方法,把当前窗体的画笔、字体、颜色作为默认值,获取对窗体的画笔、字体、颜色作为默认值,获取对Graph

9、ics对象的引用对象的引用。例如:例如: Graphics g; g = this.CreateGraphics(); 9.1.2 Graphics类(续)类(续) 143.从继承自图像的任何对象创建从继承自图像的任何对象创建Graphics对象,对象,例如:例如: Bitmap myBitmap = new Bitmap(C:mytest1PicsmyPic.bmp); Graphics g = Graphics.FromImage(myBitmap); 159.1.3 颜色颜色 颜色是进行图形操作的基本要素,它封装在颜色是进行图形操作的基本要素,它封装在System.Drawing.Col

10、or结构中。人眼可以分辨的任何颜色都结构中。人眼可以分辨的任何颜色都是由一定的红、绿、蓝三色光组成。任何一种颜色都可以有是由一定的红、绿、蓝三色光组成。任何一种颜色都可以有四个分量,分别是:四个分量,分别是:R、G、B、A。其中:。其中: R:红色,取值范围:红色,取值范围0255,0表示没有红色成分,表示没有红色成分,255为饱和红色;为饱和红色; G:绿色,取值范围:绿色,取值范围0255,0表示没有绿色成分,表示没有绿色成分,255为饱和绿色;为饱和绿色; B:蓝色,取值范围:蓝色,取值范围0255,0表示没有蓝色成分,表示没有蓝色成分,255为饱和蓝色;为饱和蓝色; A:Alpha值,

11、即透明度,取值范围值,即透明度,取值范围0255,0表示完全表示完全透明,透明,255表示完全不透明。表示完全不透明。 16 在代码中声明颜色的方式常用有两种:在代码中声明颜色的方式常用有两种: 1.调用静态方法调用静态方法Color.FromArgb()指定任意颜色指定任意颜色,这这种方法有两种常用形式。种方法有两种常用形式。第一种形式为直接指定三种颜色,方法原型为:第一种形式为直接指定三种颜色,方法原型为: Public static Color FromArgb (int red,int green,int blue); 三个参数分别表示三个参数分别表示R、G、B三色,三色,Alpha值

12、使用默认值值使用默认值255,即完全不透明。例如:即完全不透明。例如: Color red = Color.FromArgb(255, 0, 0);第二种形式为四个参数,方法原型为:第二种形式为四个参数,方法原型为: Public static Color FromArgb (int alpha,int red,int green, int blue); 四个参数分别表示透明度、四个参数分别表示透明度、R、G、B三色值。三色值。9.1.3 颜色(续)颜色(续)172.系统预定义颜色系统预定义颜色 System.Drawing.Color结构中提供了许多静态性,结构中提供了许多静态性,每个属性返

13、回一个命名颜色,在每个属性返回一个命名颜色,在Color结构中已经预定结构中已经预定义了义了141种颜色,可以直接使用。例如:种颜色,可以直接使用。例如: this.BackColor = Color.White;9.1.3 颜色(续)颜色(续)189.1.4 画画笔和画刷笔和画刷 在在GDI+GDI+中,可以使用画笔和画刷绘制或填充图中,可以使用画笔和画刷绘制或填充图形、文本和图像。笔是形、文本和图像。笔是PenPen类的实例,用于绘制各类的实例,用于绘制各种直线、空心图形和实心图形等。画刷是从种直线、空心图形和实心图形等。画刷是从BrushBrush类派生的任何类的实例,用于填充形状或绘制

14、文本。类派生的任何类的实例,用于填充形状或绘制文本。 191. 画笔(画笔(Pen) 画笔可用于绘制绘制具有指定宽度和样式的画笔可用于绘制绘制具有指定宽度和样式的直线、曲线或轮廓形状。直线、曲线或轮廓形状。 下面的示例说明如何创建一支基本的蓝色画笔:下面的示例说明如何创建一支基本的蓝色画笔: Pen myPen = new Pen(Color.Blue)Pen myPen = new Pen(Color.Blue); Pen myPen = new Pen(Color.Blue, 10.5f)Pen myPen = new Pen(Color.Blue, 10.5f); 也可以从画刷对象创建画

15、笔对象,例如:也可以从画刷对象创建画笔对象,例如: 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);20【例【例 9-2】画画笔(笔(PenPen)的用法演示示例。)的用法演示示例。 添加名称空间引用:添加名称空间引用

16、:using System.Drawing.Drawing2Dusing System.Drawing.Drawing2D,并用如下代码添加并用如下代码添加Form1_PaintForm1_Paint事件。事件。 Graphics g = e.Graphics; /创建创建Graphics对象对象 Pen blackpen = new Pen(Color.Black, 10.0f); /创建一支黑色的画笔创建一支黑色的画笔 /绘制字符串绘制字符串 g.DrawString(黑色黑色,宽度为宽度为10.0, this.Font, Brushes.Black, 5, 5); /绘制宽度为绘制宽度为

17、10.0f的黑色直线的黑色直线 g.DrawLine(blackpen, new Point(110, 12), new Point(400, 12); /创建一支红色的画笔创建一支红色的画笔 Pen redpen = new Pen(Color.Red, 5.0f); /绘制字符串绘制字符串 g.DrawString(红色红色,宽度为宽度为5, this.Font, Brushes.Black, 5, 25); /绘制宽度为绘制宽度为5的红色直线的红色直线 g.DrawLine(redpen, new Point(110, 30), new Point(400, 30);9.1.4 画笔和画

18、刷(续)画笔和画刷(续) 21/创建一支蓝色的笔创建一支蓝色的笔Pen bluepen = new Pen(Color.Blue,6);/定义直线的样式定义直线的样式bluepen.StartCap = LineCap.Flat;bluepen.EndCap = LineCap.ArrowAnchor;/绘制字符串绘制字符串g.DrawString(“蓝色箭头线蓝色箭头线”, this.Font, Brushes.Black, 5, 45);/绘制宽度为绘制宽度为6的蓝色箭头线的蓝色箭头线g.DrawLine(bluepen, new Point(110, 50), new Point(400

19、, 50);/再创建一支黑色的画笔再创建一支黑色的画笔Pen iblackpen = new Pen(Color.Black, 2.0f)/定义直线的样式定义直线的样式iblackpen.DashStyle = DashStyle.Custom;iblackpen.DashPattern = new float 4, 4 ;iblackpen.EndCap = LineCap.NoAnchor;/绘制字符串绘制字符串g.DrawString(自定义虚线自定义虚线, this.Font, Brushes.Black, 5, 65);9.1.4 画笔和画刷(续)画笔和画刷(续) 22/绘制宽度为绘

20、制宽度为2的自定义虚线的自定义虚线g.DrawLine(iblackpen, new Point(110, 70), new Point(400, 70);/再创建一支红色的笔再创建一支红色的笔Pen iredpen = new Pen(Color.Red, 2.0f);/定义直线的样式定义直线的样式iredpen.DashStyle = DashStyle.Dot;/绘制字符串绘制字符串g.DrawString(点划线点划线, this.Font, Brushes.Black, 5, 85);/绘制宽度为绘制宽度为2的点划线的点划线g.DrawLine(iredpen, new Point(

21、110, 90), new Point(400, 90);9.1.4 画笔和画刷(续)画笔和画刷(续) 239.1.4 画笔和画刷(续)画笔和画刷(续) 2.2.画刷(画刷(BrushBrush) 画刷是可以与画刷是可以与Graphics对象一起使用来创建实心形状和对象一起使用来创建实心形状和呈现文本的对象。可以用来填充各种图形形状,如矩形、椭呈现文本的对象。可以用来填充各种图形形状,如矩形、椭圆、饼型图和多边形等。圆、饼型图和多边形等。类类说明说明SolidBrush用纯色填充图形用纯色填充图形TextureBrush用基于光栅的图像用基于光栅的图像(位图、位图、JPG等等)填充图形填充图形

22、LinearBradientBrush用颜色渐变填充图形用颜色渐变填充图形PathGradientBrush用渐变效果填充图形用渐变效果填充图形HatchBrush用各种图案填充图形用各种图案填充图形241)1)使用使用SolidBrushSolidBrush类定义单色画刷类定义单色画刷 SolidBrush类用于定义单色画刷。该类可以填充图形,类用于定义单色画刷。该类可以填充图形,比如矩形、椭圆、多边形和路径。比如矩形、椭圆、多边形和路径。 【例【例 9-39-3】单色画刷演示示例。】单色画刷演示示例。 添加名称空间引用:添加名称空间引用:using System.Drawing.Drawi

23、ng2D; 并并用如下代码添加用如下代码添加Form1_PaintForm1_Paint事件。事件。Graphics g = e.Graphics;SolidBrush mySolidBrush = new SolidBrush(Color.Red);g.FillEllipse(mySolidBrush, 30,30, 130, 100); 9.1.4 画笔和画刷(续)画笔和画刷(续) 252)2)使用使用HatchBrush类填充简单图案类填充简单图案 HatchBrush类提供的画刷可以用各种图案填充图形。通过类提供的画刷可以用各种图案填充图形。通过Hatch类型可以设置影线样式。在创建影

24、线的画刷时,能设定前类型可以设置影线样式。在创建影线的画刷时,能设定前景色、背景色和影线样式。有景色、背景色和影线样式。有56种不同的影线样式枚举。种不同的影线样式枚举。【例【例 9-49-4】填充简单图案示例。】填充简单图案示例。 添加名称空间引用:添加名称空间引用:using System.Drawing.Drawing2D;并用并用如下代码添加如下代码添加Form1_paintForm1_paint事件。事件。 Graphics g = e.Graphics;HatchBrush myHatchBrush =new HatchBrush(HatchStyle.Cross, Color.W

25、hite ,Color.Red );g.FillEllipse(myHatchBrush, this.ClientRectangle); 9.1.4 画笔和画刷(续)画笔和画刷(续) 263)3)使用使用TextureBrush类填充复杂图像类填充复杂图像 TextureBrush类使用图像作为填充的样式,类使用图像作为填充的样式,它可以使用例如它可以使用例如.bmp、.jpg、.png等格式的图像。等格式的图像。初始化一个新的初始化一个新的TextureBrush对象需要指定填对象需要指定填充的图像。充的图像。9.1.4 画笔和画刷(续)画笔和画刷(续) 27【例【例 9-59-5】创建】创

26、建TextureBrushTextureBrush示例。示例。 将所用图像添加到项目中,并修改图片的【复制到输出目将所用图像添加到项目中,并修改图片的【复制到输出目录】属性为录】属性为“总是复制总是复制”,用如下代码添加,用如下代码添加Form1_PaintForm1_Paint事件。事件。/创建创建Graphics对象对象Graphics g = e.Graphics;/根据文件名创建原始大小的根据文件名创建原始大小的Bitmap对象对象Bitmap bitmap = new Bitmap(xue.jpg);/将其缩放到当前窗体大小将其缩放到当前窗体大小bitmap = new Bitmap

27、(bitmap, this.ClientRectangle.Size);TextureBrush myBrush = new TextureBrush(bitmap);g.FillEllipse(myBrush, this.ClientRectangle);9.1.4 画笔和画刷(续)画笔和画刷(续) 284)使用使用LinearGradientBrush类定义线性渐类定义线性渐变变29LinearGradientBrush对象用颜色线性渐变填充图形。提供对象用颜色线性渐变填充图形。提供了以下三种构造函数:了以下三种构造函数: (1) 提供两个点和两种颜色。提供两个点和两种颜色。 Public

28、 LinearGradientBrush ( Point point1, Point point2, Color color1, Color color2) (2) 提供一个矩形和一个角度。提供一个矩形和一个角度。 Public LinearGradientBrush (Rectangle rect ,Color color1, Color color2,float angle) (3) 指定渐变的模式。指定渐变的模式。 Public LinearGradientBrush (Rectangle rect ,Color color1, Color color2, LinearGradientM

29、ode linearGradientMode) 9.1.4 画笔和画刷(续)画笔和画刷(续) 30【例【例 9-6】使用点描述线性渐变。】使用点描述线性渐变。 添加名称空间引用:添加名称空间引用:using System.Drawing.Drawing2D;并用如下代码添加并用如下代码添加Form1_Paint事件。事件。 Graphics g = e.Graphics; LinearGradientBrush myBrush = new LinearGradientBrush( new Point(0, 0),new Point(30, 30), Color.White,Color.Blue

30、); g.FillRectangle(myBrush, this.ClientRectangle); myBrush.Dispose();9.1.4 画笔和画刷(续)画笔和画刷(续) 31【例【例 9-7】使用矩形描述线性渐变。】使用矩形描述线性渐变。 添加名称空间引用:添加名称空间引用:using System.Drawing.Drawing2D;并用如下代码添加并用如下代码添加Form1_Paint事件。事件。 Graphics myGraphics = e.Graphics; LinearGradientBrush lgb2 = new LinearGradientBrush( new

31、Rectangle(0, 0, 70, 70), Color.White,Color.Black,30f); e.Graphics.FillRectangle(lgb2, this.ClientRectangle); lgb2.Dispose();9.1.4 画笔和画刷(续)画笔和画刷(续) 325)5)使用使用PathGradientBrushPathGradientBrush类实现彩色渐变类实现彩色渐变 在在GDI+中,把一个或多个图形组成的形体称为路径。可中,把一个或多个图形组成的形体称为路径。可以使用以使用GraphicsPath类定义路径,使用类定义路径,使用PathGradient

32、Brush类类定义路径内部的渐变色画刷。渐变色从路径的内部中心点逐渐定义路径内部的渐变色画刷。渐变色从路径的内部中心点逐渐过渡到路径的外边界边缘。过渡到路径的外边界边缘。 PathGradientBrush类提供了三种重载的构造函数,其中类提供了三种重载的构造函数,其中常用的是通过指定路径实现彩色渐变。常用形式如下:常用的是通过指定路径实现彩色渐变。常用形式如下: Public PathGradientBrush ( GraphicsPath path)【例【例 9-8】路径和路径画刷的使用示例。】路径和路径画刷的使用示例。9.1.4 画笔和画刷(续)画笔和画刷(续) 33 Graphics

33、g = e.Graphics; Point centerPoint = new Point(80, 80); 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.CenterPoint = centerPoint; /指定路径中心点的颜色指定路径中心点的颜

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

35、 R, centerPoint.Y - R, 2 * R, 2 * R); 9.1.4 画笔和画刷(续)画笔和画刷(续) 34path.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

36、 = Color.White ;brush.SurroundColors = new Color Color.Black,Color.Blue,Color.Green ;g.FillPath(brush, path);9.1.4 画笔和画刷(续)画笔和画刷(续) 359.2 绘制基本图形绘制基本图形 所有绘制图形的方法都位于所有绘制图形的方法都位于GraphicsGraphics中。中。9.2.1 直线直线 在在GDI+中绘制直线首先需要创建一个中绘制直线首先需要创建一个Graphics对象和一个对象和一个Pen对象。对象。Graphics对象提供了绘图的方法,只有创建了对象提供了绘图的方法,

37、只有创建了Graphics对象才能进行绘图操作;对象才能进行绘图操作;Pen对象可以指定所绘制直线对象可以指定所绘制直线的一些属性,例如:线的颜色、宽度和类型等。的一些属性,例如:线的颜色、宽度和类型等。 绘制直线用到绘制直线用到Graphics对象中的两种方法:对象中的两种方法:DrawLine方法方法和和DrawLines方法。方法。DrawLine用于绘制一条直线,用于绘制一条直线,DrawLines用用于绘制多条直线。于绘制多条直线。 361.DrawLine方法常用形式方法常用形式 1) 绘制一条连接指定两个绘制一条连接指定两个Point结构的线。结构的线。 public void

38、DrawLine (Pen pen,Point pt1, Point pt2) 其中,其中,Pen对象确定线条的颜色、宽度和样式;对象确定线条的颜色、宽度和样式;Point结构确定起点和终点。结构确定起点和终点。 2) 绘制一条由坐标对指定的两个点的线。绘制一条由坐标对指定的两个点的线。 public void DrawLine (Pen pen,int x1, int y1,int x2,int y2) 其中,其中,Pen对象确定线条的颜色、宽度和样式;对象确定线条的颜色、宽度和样式;x1,y1为起点坐标,为起点坐标,x2,y2为终点坐标。为终点坐标。9.2.1 直线(续)直线(续) 379

39、.2.1 直线(续)直线(续)2.DrawLines方法常用形式方法常用形式 绘制一系列点组成的线。绘制一系列点组成的线。 public void DrawLines (Pen pen,Point points) 其中,其中,Pen对象确定线条的颜色、宽度和样对象确定线条的颜色、宽度和样式;数组中的第一个点指定起始点,后面的每个点式;数组中的第一个点指定起始点,后面的每个点都以相临的前一个点为起始点组成线段。都以相临的前一个点为起始点组成线段。 38【例【例 9-9】使用】使用DrawLine方法和方法和DrawLines方法绘制直线。方法绘制直线。 用如下代码添加用如下代码添加Fror1_P

40、aint事件。事件。Graphics g = e.Graphics; /创建创建Graphics对象对象Pen blackPen = new Pen(Color.Black, 3); / 创建一支黑色的画笔创建一支黑色的画笔Point point1 = new Point(200,50); / 定义直线的两个点定义直线的两个点Point point2 = new Point(400,50); g.DrawLine(blackPen, point1, point2); / 绘制直线绘制直线Pen redPen = new Pen(Color.Red, 3); / 创建一支红色的画笔创建一支红色的

41、画笔int x1 = 200; / 定义起点和终点坐标定义起点和终点坐标int y1 = 100;int x2 = 400;int y2 = 130;g.DrawLine(redPen, x1, y1, x2, y2); / 绘制直线绘制直线9.2.1 直线(续)直线(续) 39Pen pen = new Pen(Color.Blue , 3); / 创建一支蓝色的画笔创建一支蓝色的画笔Point points = new Point(200,180), new Point(200,200), new Point(400,200), new Point(400,180); / 定义一系列点定义

42、一系列点/绘制直线绘制直线g.DrawLines(pen, points); 9.2.1 直线(续)直线(续) 409.2.2 矩形矩形1. 使用使用DrawRectangle方法绘制矩形常用形式方法绘制矩形常用形式 1)指定绘制矩形的结构指定绘制矩形的结构 public void DrawRectangle (Pen pen, Rectangle rect) 其中其中rect表示要绘制的矩形的结构。表示要绘制的矩形的结构。 2)指定矩形左上角的坐标及宽和高指定矩形左上角的坐标及宽和高 public void DrawRectangle (Pen pen, int x, int y, int

43、width, int height) 其中其中x,y为矩形左上角的坐标值。为矩形左上角的坐标值。2. 使用使用DrawRectangles方法绘制多个矩形常用形式方法绘制多个矩形常用形式 public void DrawRectangles (Pen pen, Rectangle rects) 其中其中rects表示要绘制的多个矩形的结构。表示要绘制的多个矩形的结构。419.2.2 矩形(续)矩形(续)3. 使用使用FillRectangle方法填充矩形常用形式方法填充矩形常用形式 1) 指定填充画刷和矩形的结构指定填充画刷和矩形的结构 public void FillRectangle (

44、Brush brush, Rectangle rect) 其中其中brush 指定填充矩形的画刷,指定填充矩形的画刷,rect表示要绘表示要绘制的矩形的结构。制的矩形的结构。 2) 指定填充画刷和矩形左上角的坐标及宽和高指定填充画刷和矩形左上角的坐标及宽和高 public void FillRectangle (Brush brush, int x,int y,int width,int height ) 其中其中brush 指定填充矩形的画刷,指定填充矩形的画刷,x,y表示矩形左表示矩形左上角的坐标,上角的坐标,width和和height表示矩形的宽和高。表示矩形的宽和高。424. 使用使用

45、FillRectangles方法填充多个矩形常用形式方法填充多个矩形常用形式 public void FillRectangles ( Brush brush, Rectangle rects )439.2.2 矩形(续)矩形(续)【例【例 9-10】绘制矩形方法示例。】绘制矩形方法示例。 用以下代码添加用以下代码添加Form1_Paint事件。事件。Graphics g = e.Graphics; / 创建创建Graphics对象对象Pen blackPen = new Pen(Color.Black, 3); / 创建一支黑色的画笔创建一支黑色的画笔Rectangle rect = new

46、 Rectangle(300, 21, 200, 50); / 指定矩形的结构指定矩形的结构g.DrawRectangle(blackPen, rect); / 绘制矩形绘制矩形Pen redPen= new Pen(Color.Red, 3); / 创建一支红色的画笔创建一支红色的画笔/ 指定矩形左上角的坐标及宽和高指定矩形左上角的坐标及宽和高int x = 300;/矩形左上角点的矩形左上角点的x坐标分量坐标分量int y = 90;/矩形左上角点的矩形左上角点的y坐标分量坐标分量int width = 200;/矩形的宽矩形的宽int height = 50;/矩形的高矩形的高g.Dra

47、wRectangle(redPen, x, y, width, height); / 绘制矩形绘制矩形Pen bluePen = new Pen(Color.Blue, 3); / 创建一支蓝色的画笔创建一支蓝色的画笔 449.2.2 矩形(续)矩形(续)Rectangle rects = new Rectangle (300,160,90,50), new Rectangle (350,170,90,50), new Rectangle (400,160,90,50); /指定多个矩形的结构指定多个矩形的结构g.DrawRectangles(bluePen, rects); /绘制多个矩形绘

48、制多个矩形/创建一支黑色的画刷创建一支黑色的画刷SolidBrush blackBrush = new SolidBrush(Color.Black); Rectangle rect1 = new Rectangle(300, 240, 200, 50); / 指定矩形的结构指定矩形的结构g.FillRectangle(blackBrush, rect1); / 填充矩形填充矩形SolidBrush redBrush = new SolidBrush(Color.Red); /创建一支黑色的画刷创建一支黑色的画刷/ 指定矩形左上角的坐标及宽和高指定矩形左上角的坐标及宽和高int ix = 30

49、0; /矩形左上角点的矩形左上角点的x坐标分量坐标分量int iy = 310; /矩形左上角点的矩形左上角点的y坐标分量坐标分量int iwidth = 200; /矩形的宽矩形的宽int iheight = 50; /矩形的高矩形的高g.FillRectangle(redBrush, ix, iy, iwidth, iheight); / 填充矩形填充矩形459.2.2 矩形(续)矩形(续)/创建一支蓝色的画刷创建一支蓝色的画刷SolidBrush blueBrush = new SolidBrush(Color.Blue); Rectangle irects = new Rectangl

50、e (300,380,90,50), new Rectangle (350,390,90,50), new Rectangle (400,380,90,50); /指定多个矩形的结构指定多个矩形的结构/填充多个矩形填充多个矩形g.FillRectangles(blueBrush, irects); 469.2.3 多边形多边形1. DrawPolygon方法方法 DrawPolygon方法用来绘制多边形的轮廓,一方法用来绘制多边形的轮廓,一个多边形是由数组中指明的节点连接起来而组成个多边形是由数组中指明的节点连接起来而组成的。的。DrawPolygon方法常用形式如下:方法常用形式如下: pu

51、blic void DrawPolygon (Pen pen, Point points)2. FillPolygon方法方法 FillPolygon方法用来填充多边形的封闭区域。方法用来填充多边形的封闭区域。FillPolygon方法常用形式如下:方法常用形式如下: public void FillPolygon (Brush brush, Point points)479.2.3 多边形(续)多边形(续)【例【例 9-11】绘制多边形示例。】绘制多边形示例。 添加名称空间引用添加名称空间引用using System.Drawing.Drawing2D;并用如下代码添加窗体的并用如下代码添加

52、窗体的Paint事件。事件。Graphics g = e.Graphics; /创建创建Graphics对象对象Pen pen = new Pen(Color.Red); / 创建一支红色的画笔创建一支红色的画笔Point points = new Point (50,50), new Point (100,50), new Point (130,90), new Point (130,140), new Point (100,180), new Point (50,180), new Point (20,140), new Point (20,90); / 定义多边形的点定义多边形的点489

53、.2.3 多边形(续)多边形(续) g.DrawPolygon(pen, points); /绘制多边形轮廓绘制多边形轮廓Point points1 = new Point (250,50), new Point (300,50), new Point (330,90), new Point (330,140), new Point (300,180), new Point (250,180), new Point (220,140), new Point (220,90); /定义第二个多边形的点定义第二个多边形的点/填充多边形封闭区域填充多边形封闭区域g.FillPolygon(new S

54、olidBrush(Color.Red), points1); 499.2.4 曲线曲线1. DrawCurve方法方法 这个方法用光滑的曲线把给定的点连接起来,这个方法用光滑的曲线把给定的点连接起来,常用形式有:常用形式有: 1) public void DrawCurve (Pen pen ,Point points ) 其中,其中,Point结构类型的数组中指明各节点,结构类型的数组中指明各节点,默认弯曲强度为默认弯曲强度为0.5。注意,数组中至少要有。注意,数组中至少要有3个元个元素。素。 2) public void DrawCurve (Pen pen ,Point points,

55、float tension ) 其中,其中,tension指定弯曲强度,该值范围为指定弯曲强度,该值范围为0.0f1.0f,超出此范围会产生异常。当弯曲强度为,超出此范围会产生异常。当弯曲强度为零时,就是直线。零时,就是直线。509.2.4 曲线(续)曲线(续)2. DrawClosedCurve方法方法 这个方法是通过连接数组中节点画一个平滑的曲线,这个方法是通过连接数组中节点画一个平滑的曲线,此方法会自动把首尾节点连接起来构成封闭曲线。注意此方法会自动把首尾节点连接起来构成封闭曲线。注意数组中的节点至少要有数组中的节点至少要有3个点组成,默认弯曲强度为个点组成,默认弯曲强度为0.5。 1)

56、 public void DrawClosedCurve (Pen pen ,Point points ) 其中,其中,Point结构类型的数组中指明各节点。结构类型的数组中指明各节点。 2) public void DrawClosedCurve (Pen pen ,Point points,float tension FillMode fillmode) 其中,其中,fillmode指明曲线封闭区域内以何种方式填充。指明曲线封闭区域内以何种方式填充。519.2.4 曲线(续)曲线(续)3. 贝塞尔曲线贝塞尔曲线 每段贝塞尔曲线由每段贝塞尔曲线由4个点组成,两个端点个点组成,两个端点(p1为

57、起点,为起点,p2为终点)和两个控制点(为终点)和两个控制点(c1和和c2)。曲线不经过控制点,但是控制点如同一个)。曲线不经过控制点,但是控制点如同一个磁体吸引曲线,影响并引导曲线向某个方向拉磁体吸引曲线,影响并引导曲线向某个方向拉伸。伸。529.2.4 曲线(续)曲线(续)1) DrawBezier方法:用来绘制一段贝塞尔曲方法:用来绘制一段贝塞尔曲线的,常用形式如下:线的,常用形式如下: public void DrawBezier (Pen pen ,Point pt1,Point pt2,Point pt3,Point pt4 ) 其中其中pt1、pt2、pt3和和pt4分别指定四个

58、点。分别指定四个点。532) DrawBeziers方法:用来绘制多段贝塞尔曲方法:用来绘制多段贝塞尔曲线,常用形式如下:线,常用形式如下: public void DrawBezier (Pen pen ,Point points) 其中其中points是是Point结构的数组,第一段贝塞尔结构的数组,第一段贝塞尔曲线由点数组中的第曲线由点数组中的第14个点绘制而成。以后每段个点绘制而成。以后每段曲线只需要曲线只需要3个点:个点:2个控制点和一个结束点。前一个控制点和一个结束点。前一段曲线的结束点会自动被用作后一段曲线的起始段曲线的结束点会自动被用作后一段曲线的起始点。点。549.2.4 曲

59、线(续)曲线(续)【例【例 9-12】绘制曲线示例。】绘制曲线示例。 添加名称空间引用:添加名称空间引用:using System.Drawing.Drawing2D; 并用如下代码添加窗体的并用如下代码添加窗体的Paint事件。事件。 Graphics g = e.Graphics; /创建创建Graphics对象对象Pen redPen = new Pen(Color.Red,3); / 创建一支红色的画笔创建一支红色的画笔Point curve1points = new Point (150,100),new Point (200,50), new Point (250,100),new

60、 Point (300,50); / 定义组成曲线的点定义组成曲线的点g.DrawCurve(redPen, curve1points);Pen blackPen = new Pen(Color.Black, 3); / 创建一支黑色的画笔创建一支黑色的画笔Point curve1points = new Point (150,100),new Point (200,50), new Point (250,100),new Point (300,50); / 定义组成曲线的点定义组成曲线的点559.2.4 曲线(续)曲线(续)float tension = 1.0f;g.DrawCurve(b

温馨提示

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

评论

0/150

提交评论