第6章-GDI-编程分析课件_第1页
第6章-GDI-编程分析课件_第2页
第6章-GDI-编程分析课件_第3页
第6章-GDI-编程分析课件_第4页
第6章-GDI-编程分析课件_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第6章

GDI+编程6.1GDI+简介6.2绘图6.3颜色6.4文本输出6.5图像处理第6章GDI+编程6.1GDI+简介6.2绘图66.1GDI+简介6.1.1坐标系绘图是在一个逻辑坐标系中进行的,它是一个相对的坐标系,比如,可以是窗体坐标系,也可以是某个对象坐标系(如文本框、按钮等对象),无论是基于哪一种对象,坐标系总是以该对象的左上角为原点(0,0)。除了原点外,坐标系还包括横坐标(X轴)和纵坐标(Y轴),X值是指点与原点的水平距离,Y值是指点与原点的垂直距离,如图6.1所示。YX(0,0)6.1GDI+简介6.1.1坐标系YX(0,0)6.1.2像素像素是光栅设备可以显示的最小单位。对单色设备来说,每个像素可以用一位(比特)表示,而对彩色设备,每个像素必须用多个位表示,位数越多,所表示的颜色越丰富,表6.1列出了部分设备中每个像素的位数及颜色数:像素位数颜色数典型设备12单色显示器、打印机216标准VGA8256256色VGA1632768或6553532K或64K色VGA2422424位真彩色设备3223232位真彩色设备6.1.2像素像素是光栅设备可以显示的最小单位。对单色设备6.1.3Graphics类1.Paint事件

在为窗体编写Paint事件处理程序时,图形对象作为一个

PaintEventArgs类的实例提供。下面的代码引用

Paint事件的

PaintEventArgs中的

Graphics对象:privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgspe){ /*声明图形对象并把它设置为PaintEventArgs事件提供的图形对象*/ Graphicsg=pe.Graphics;}2.CreateGraphics方法使用控件或窗体的CreateGraphics()方法获取对Graphics对象的引用,该对象表示这个控件或窗体的绘图表面。例如:Graphicsg;g=this.CreateGraphics();//把g设为一个图形对象,来表示控件或窗体的绘图平面6.1.3Graphics类1.Paint事件6.1.3Graphics类3.Graphics.FromImage方法从Image类派生的任何对象创建图形对象,调用Graphics.FromImage()方法即可。例如:BitmapmyBitmap=newBitmap(@"C:\myPic.bmp");Graphicsg=Graphics.FromImage(myBitmap);在GDI+中,可使用“画笔”和“画刷”对象来呈现图形、文本和图像。画笔是Pen类的实例,可用于绘制线条和空心形状。画刷是从抽象类Brush类派生的任何类的实例,可用于填充形状或绘制文本。Color对象是表示特定颜色类的实例,画笔和画刷可使用构造函数来指定它所呈现图形的颜色。例如:PenmyPen=newPen(Color.Red); //创建一个红色的画笔SolidBrushmyBrush=newSolidBrush(Color.Blue); //创建一个深蓝色的画刷6.1.3Graphics类3.Graphics.From6.1.3Graphics类Graphics类的常用属性和方法分别如表6.2和6.3所示。属性名称说明CompositingMode获取一个值,该值指定如何将合成图像绘制到此GraphicsCompositingQuality获取或设置绘制到此Graphics的合成图像的呈现质量DpiX获取此

Graphics的水平分辨率DpiY获取此

Graphics的垂直分辨率InterpolationMode获取或设置与此

Graphics关联的插补模式IsClipEmpty获取一个值,该值指示此

Graphics的剪辑区域是否为空。IsVisibleClipEmpty获取一个值,该值指示此

Graphics的可见剪辑区域是否为空PageScale获取或设置此

Graphics的全局单位和页单位之间的比例PageUnit获取或设置用于此

Graphics中的页坐标的度量单位PixelOffsetMode获取或设置一个值,该值指定在呈现此

Graphics的过程中像素如何偏移RenderingOrigin为抵色处理和阴影画笔获取或设置此

Graphics的呈现原点SmoothingMode获取或设置此

Graphics的呈现质量TextContrast获取或设置呈现文本的灰度校正值TextRenderingHint获取或设置与此

Graphics关联的文本的呈现模式Transform获取或设置此

Graphics的几何世界变换的副本VisibleClipBounds获取此

Graphics的可见剪辑区域的边框6.1.3Graphics类Graphics类的常用属性和6.1.3Graphics类方法名称说明BeginContainer保存具有此

Graphics的当前状态的图形容器,然后打开并使用新的图形容器Clear清除整个绘图面并以指定背景色填充Dispose释放由

Graphics使用的所有资源DrawArc绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分DrawBezier绘制由

4个

Point结构定义的贝塞尔样条DrawBeziers用

Point结构数组绘制一系列贝塞尔样条DrawClosedCurve绘制由

Point结构的数组定义的闭合基数样条DrawCurve绘制经过一组指定的

Point结构的基数样条DrawEllipse绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆DrawIcon在指定坐标处绘制由指定的

Icon表示的图像DrawImage在指定位置并且按原始大小绘制指定的

ImageDrawLine绘制一条连接由坐标对指定的两个点的线条DrawLines绘制一系列连接一组

Point结构的线段DrawPie绘制一个扇形,该形状由一个坐标对、宽度、高度以及两条射线所指定的椭圆定义DrawPolygon绘制由一组

Point结构定义的多边形DrawRectangle绘制由坐标对、宽度和高度指定的矩形DrawString在指定位置并且用指定的

Brush和

Font对象绘制指定的文本字符串FillRectangle填充由一对坐标、一个宽度和一个高度指定的矩形的内部Flush强制执行所有挂起的图形操作并立即返回而不等待操作完成表6.3Graphics类的常用方法6.1.3Graphics类方法名称说明Begin6.2绘图6.2.1画笔画笔(Pen)用于绘制直线和曲线,无法继承此类,在System.Drawing命名空间中。画笔可用于绘制线条、曲线以及勾勒形状轮廓。下面的代码创建一支基本的黑色画笔:PenmyPen=newPen(Color.Black); //创建一个默认宽度为1的黑画笔PenmyPen=newPen(Color.Black,5); //创建一个宽度为5的黑画笔也可以通过已存在的画刷对象创建画笔。下面的代码创建基于已存在画刷(名为

myBrush)的画笔:PenmyPen=newPen(myBrush); //创建一个画笔,与myBrush有相同的属性,并且默认宽度为1PenmyPen=newPen(myBrush,5);//创建一个画笔,与myBrush有相同的属性,并且宽度为56.2绘图6.2.1画笔6.2.2画刷画刷是与Graphics对象一起使用来创建实心形状和呈现颜色与图案的对象。几种不同类型的画刷如表6.4所示。Brush类的子类说明SolidBrush画笔的最简单形式,它用纯色进行绘制HatchBrush类似于SolidBrush,但是该类允许从大量预设的图案中选择绘制时要使用的图案,而不是纯色TextureBrush使用纹理(如图像)进行绘制LinearGradientBrush使用渐变混合的两种颜色进行绘制PathGradientBrush基于开发人员定义的唯一路径,使用复杂的混合色渐变进行绘制6.2.2画刷画刷是与Graphics对象一起使用来创建实6.2.2画刷【例6.1】设计WinForm应用程序分别使用笔和画笔画出以坐标(30,30)和(130,30)为起点的长为70,高为50的矩形。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“画笔与画刷”。从工具箱中拖放2个Button控件到窗体中,如图6.2布局控件。button1和button2的Text属性值分别设置为“画笔”和“画刷”。分别双击“画笔”和“画刷”按钮,其事件代码如下所示:

privatevoidbutton1_Click(objectsender,EventArgse){

PenmyPen=newPen(Color.Black); //定义颜色为黑色的画笔 Graphicsg=this.CreateGraphics(); //创建Graphics对象 g.DrawRectangle(myPen,30,30,70,50); //利用画笔画矩形}privatevoidbutton2_Click(objectsender,EventArgse){ Graphicsg=this.CreateGraphics(); //创建Graphics对象

SolidBrushmySBrush=newSolidBrush(Color.Red);//定义颜色为红色的画刷 g.FillRectangle(mySBrush,130,30,70,50); //利用画刷画矩形}6.2.2画刷【例6.1】设计WinForm应用程序分别使6.2.2画刷分别单击“画笔”和“画刷”按钮,。运行前后结果如图6.2所示。

6.2.2画刷分别单击“画笔”和“画刷”按钮,。运行前后结6.2.3绘制直线1.绘制一条连接两个Point结构的线。Graphicsg=this.CreateGraphics();g.DrawLine(PenmyPen,Pointpt1,Pointpt2);其中笔对象myPen确定线条的颜色、宽度和样式。ptl是Point结构,它表示要连接的一个点。pt2是Point结构,表示要连接的另一个点。2.绘制一条连接由坐标对指定的两个点的线条。Graphicsg=this.CreateGraphics();g.DrawLine(PenmyPen,intx1,inty1,intx2,inty2);DrawLine方法中各参数及说明如表6.5所示。参数说明pen确定线条的颜色、宽度和样式xl第一个点的x坐标yl第一个点的y坐标x2第二个点的x坐标y2第二个点的y坐标6.2.3绘制直线1.绘制一条连接两个Point结构的线。6.2.3绘制直线【例6.2】设计WinForm应用程序分别使用以上介绍的方法绘制直线。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“绘制直线”。从工具箱中拖放3个Button控件到窗体中。button1、button2和button3的Text属性值分别设置为“画横线”、“画竖线”和“画斜线”。在窗体设计器中分别双击“画横线”、“画竖线”和“画斜线”按钮,如代码所示。运行程序,分别单击“画横线”、“画竖线”和“画斜线”按钮,运行结果如图6.3所示。6.2.3绘制直线【例6.2】设计WinForm应用程序分6.2.4绘制矩形(1)绘制由Rectangle结构指定的矩形。Graphicsg=this.CreateGraphics();g.DrawRectangle(PenmyPen,Rectanglerect);其中myPen为笔Pen的对象,它确定矩形的颜色、宽度和样式。rect表示要绘制矩形的Rectangle结构。例如,声明一个Rectangle结构,代码如下:Rectanglerect=newRectangle(30,30,100,80); //以(30,30)为起点长为100,高为80的矩形(2)绘制由坐标对、宽度和高度指定的矩形。Graphicsg=this.CreateGraphics();g.DrawRectangle(PenmyPen,intx,inty,intwidth,intintheight);6.2.4绘制矩形(1)绘制由Rectangle结构指定6.2.4绘制矩形DrawRectangle方法中各参数及说明如表6.6所示。参数说明myPen笔Pen的对象,确定矩形的颜色、宽度和样式x要绘制矩形的左上角的x坐标y要绘制矩形的左上角的y坐标width要绘制矩形的宽度height要绘制矩形的高度6.2.4绘制矩形DrawRectangle方法中各参数及6.2.4绘制矩形【例6.3】设计WinForm应用程序分别使用以上介绍的方法绘制矩形。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“绘制矩形”。从工具箱中拖放3个Button控件到窗体中。button1、button2和button3的Text属性值分别设置为“画矩形方法一”、“画矩形方法二”和“画实心矩形”。在窗体设计器中分别双击“画矩形方法一”、“画矩形方法二”和“画实心矩形”按钮,其事件代码所示。运行程序,分别单击三个按钮,运行结果如图6.4所示。6.2.4绘制矩形【例6.3】设计WinForm应用程序分6.2.5绘制椭圆(1)绘制边界由Rectangle结构指定的椭圆。Graphicsg=this.CreateGraphics();g.DrawEllipse(PenmyPen,Rectanglerect);其中myPen为Pen对象,它确定曲线的颜色、宽度和样式。rect为Rectangle结构,它定义椭圆的边界。(2)绘制一个由边框(该边框由一对坐标、高度和宽度指定)指定的椭圆。Graphicsg=this.CreateGraphics();g.DrawEllipse(PenmyPen,intx,inty,intwidth,intheight);6.2.5绘制椭圆(1)绘制边界由Rectangle结构6.2.5绘制椭圆DrawEllipse方法中各参数及说明如表6.7所示。参数说明myPen确定曲线的颜色、宽度和样式x定义椭圆边框的左上角的x坐标y定义椭圆边框的左上角的y坐标width定义椭圆边框的宽度height定义椭圆边框的高度6.2.5绘制椭圆DrawEllipse方法中各参数及说明6.2.5绘制椭圆【例6.4】设计WinForm应用程序分别使用以上介绍的方法绘制椭圆。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“绘制椭圆”。从工具箱中拖放2个Button控件到窗体中。button1、button2和button3的Text属性值分别设置为“画椭圆方法一”、“画椭圆方法二”和“画实心椭圆”。在窗体设计器中分别双击“画椭圆方法一”、“画椭圆方法二”和“画实心椭圆”按钮,其事件代码所示。运行程序,分别单击三个按钮,运行结果如图6.5所示。6.2.5绘制椭圆【例6.4】设计WinForm应用程序分6.2.6绘制圆弧(1)绘制一段弧线,它表示由Rectangle结构指定的椭圆的一部分。Graphicsg=this.CreateGraphics();g.DrawArc(PenmyPen,Rectanglerect,startAngle,sweepAngle);DrawArc方法中各参数及说明如表6.8所示。参数说明myPenPen对象,它确定弧线的颜色、宽度和样式rectRectangle结构,它定义椭圆的边界startAngle从x轴到弧线的起始点沿顺时针方向度量的角(以度为单位)sweepAngle从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位)6.2.6绘制圆弧(1)绘制一段弧线,它表示由Recta6.2.6绘制圆弧(2)绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。Graphicsg=this.CreateGraphics();g.DrawArc(PenmyPen,intx,inty,intwidth,intheight,startAngle,sweepAngle);DrawArc方法中各参数及说明如表6.9所示。参数说明myPen确定弧线的颜色、宽度和样式x义椭圆边框的左上角的x坐标y定义椭圆边框的左上角的y坐标width定义椭圆边框的宽度height定义椭圆边框的高度startAngle从x轴到弧线的起始点沿顺时针方向度量的角(以度为单位)sweepAngle从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位)6.2.6绘制圆弧(2)绘制一段弧线,它表示由一对坐标6.2.6绘制圆弧【例6.5】设计WinForm应用程序分别使用以上介绍的方法绘制圆弧。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“绘制圆弧”。从工具箱中拖放2个Button控件到窗体中。button1和button2的Text属性值分别设置为“画圆弧方法一”和“画圆弧方法二”。在窗体设计器中分别双击“画圆弧方法一”和“画圆弧方法二”按钮,其事件代码所示。privatevoidbutton1_Click(objectsender,EventArgse) { Graphicsg=this.CreateGraphics(); PenmyPen=newPen(Color.Black,4); /*声明一个Rectangle结构以(30,30)为起点长为100,高为80的矩形*/ Rectanglerect=newRectangle(30,30,100,80);

g.DrawArc(myPen,rect,120,170); } privatevoidbutton2_Click(objectsender,EventArgse) { Graphicsg=this.CreateGraphics(); PenmyPen=newPen(Color.Red,4);

g.DrawArc(myPen,140,30,100,80,120,170); }6.2.6绘制圆弧【例6.5】设计WinForm应用程序分6.2.6绘制圆弧运行程序,分别单击三个按钮,运行结果如图6.6所示。6.2.6绘制圆弧运行程序,分别单击三个按钮,运行结果如图6.2.7绘制多边形(1)绘制由一组Point结构定义的多边形。Graphicsg=this.CreateGraphics();g.DrawPolygon(PenmyPen,Point[]points);myPen为Pen对象用来确定多边形的颜色、宽度和样式。points为Point结构数组,这些结构表示多边形的顶点。(2)绘制由一组PointF结构定义的多边形。Graphicsg=this.CreateGraphics();g.DrawPolygon(PenmyPen,PointF[]points);myPen为Pen对象用来确定多边形的颜色、宽度和样式。points为PointF结构数组,这些结构表示多边形的顶点。6.2.7绘制多边形(1)绘制由一组Point结构定义的6.2.7绘制多边形【例6.6】设计WinForm应用程序分别使用以上介绍的方法绘制多边形。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“绘制多边形”。从工具箱中拖放2个Button控件到窗体中。button1和button2的Text属性值分别设置为“绘制多边形方法一”和“绘制多边形方法二”。分别双击“绘制多边形方法一”和“绘制多边形方法二”按钮,其事件代码所示。运行程序,分别单击“绘制多边形方法一”和“绘制多边形方法二”按钮,运行结果如图6.7所示。

6.2.7绘制多边形【例6.6】设计WinForm应用程序6.3颜色1.系统定义的颜色可以通过Color结构访问若干系统定义的颜色。这些颜色的示例如下:ColormyColor=Color.Red;2.用户定义的颜色可以使用

Color.FromArgb()方法创建用户定义的颜色。定义时,可以指定一种颜色中红色、蓝色和绿色各部分的强度。ColormyColor=Color.FromArgb(23,56,78);3.Alpha混合处理(透明度)Alpha表示所呈现图形后面的对象透明度。Alpha混合处理的颜色对于各种底纹和透明度效果很有用。如果需要指定

Alpha部分,则它应为Color.FromArgb()方法中4个参数的第一个参数,并且是0~255之间的一个整数。例如:ColormyColor=Color.FromArgb(127,23,56,78);6.3颜色1.系统定义的颜色6.4文本输出6.4.1字体要输出文本,需要先指定文本的字体,字体可以通过Font类的构造函数来设置。语法格式如下:Font字体对象名

=newFont(字体名称

,大小

[,样式

[,量度]])其中:字体对象名:要创建的字体对象名。字体名称:字体的名称,String类型值。如TimeNewRoman、宋体、楷体。大小:

Single类型的值,指定字体的大小,默认单位为点。样式:可选项。指定字体的样式,是FontStyle枚举类型的值,各种样式见表6.10。量度:可选项。指定字体大小的单位,是GraphicsUnit枚举类型的值,各种量度单位见表6.11。6.4文本输出6.4.1字体6.4.1字体枚举成员样式Bold粗体Italic斜体Regular常规Strikeout中划线Underline下划线枚举成员量度单位Display1/75英寸Document文档单位(1/300英寸)Inch英寸Millimeter毫米Pixel像素Point打印机点(1/72英寸)World通用6.4.1字体枚举成员样式Bold粗体Italic斜体R6.4.2文本输出当定义了文本字体后,就可以用DrawString方法来输出文本,有三种使用DrawString方法的格式:语法:DrawString(字符串,字体对象,画刷,点)DrawString(字符串,字体对象,画刷,X,Y)DrawString(字符串,字体对象,画刷,矩形)6.4.2文本输出当定义了文本字体后,就可以用DrawSt6.4.2文本输出【例6.7】设计WinForm应用程序绘制不同字体的字符串。新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设为“绘制不同字体字符串”。添加Form1的Paint事件,其事件代码如下所示:

privatevoidForm1_Paint(objectsender,EventArgse) {FontFamily[]families=FontFamily.GetFamilies(e.Graphics);Fontfont;stringfamilyString;floatspacing=0f;inttop=families.Length>7?7:families.Length;for(inti=0;i<top;i++){font=newFont(families[i],16,FontStyle.Bold);familyString=families[i].Name+"字体形状。";e.Graphics.DrawString(familyString,font,Brushes.Bla

温馨提示

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

评论

0/150

提交评论