资源描述
第8章图形图像处理,8.1图形图像基础知识8.2绘制基本图形8.3填充图形8.4图像处理8.5图形与图像的平移、旋转与缩放8.6文字处理,本章综合举例,1.绘制柱状图、饼状图等图形。举例1:,本章综合举例,举例2:,本章综合举例,2.使用鼠标绘制图形举例:,本章综合举例,3.生成校验码,本章知识的其他应用,4.本章知识的典型应用(1)绘制天气预报图(2)绘制财务软件中各种类型的图。(3)某些管理系统中的销售、库存等各种统计制图。例如:某公司近两年来月收支结余走势图(单位:万元),8.1图形图像绘制基础知识,GDI+简介GDI+:GraphicsDeviceInterface(图形设备接口),它提供了高级图形图像处理功能。从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种图形。在C#中,进行图形程序编写时用到的是GDI+,GDI+是GDI的进一步扩展,它使编程更加方便。GDI+是下一代Windows的绘图程序,将各种绘图功能井井有条地封装在一个个的类中,以面向对象向应用程序提供绘图支持。,GDI+是微软在Windows2000以后操作系统中提供的新的图形设备接口,其在C#中,通过一套部署为托管代码的类来展现提供的图形图像处理功能,这套类被称为GDI+的托管类。利用GDI+的托管类可以轻松实现颜色渐变、透明处理、纹理处理、拉伸和缩放等多种高级功能。GDI+主要提供了三类服务:1.二维矢量图形处理2.二维图像处理3.文字显示,8.1图形图像绘制基础知识,(1)二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类,如Pen、Brush等等。(2)图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。(3)文字显示:GDI+支持使用各种字体、字号和样式来显示文本。,8.1图形图像绘制基础知识,GDI+比GDI优越主要表现在两个方面:(一)GDI+通过提供新功能(例如:渐变画笔和alpha混合)扩展了GDI的功能;(二)修订了编程模型,使图形编程更加简易灵活。,基类抽象类接口,子类具体类实现了接口,使用基类的属性、方法编程,8.1.1GDI+概述(续),.NET框架提供的类1.System.Drawing名称空间提供了对GDI+基本图形功能的访问,主要有Graphics类Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等。2.System.Drawing.Drawing2D名称空间提供了高级的二维和矢量图形处理功能。主要有:梯度型画刷、Matrix类(用于定义几何变换)和GraphicsPath类等。3.System.Drawing.Imaging名称空间提供了高级图像处理功能。4.System.Drawing.Text名称空间提供了高级字体和文本排版功能,8.1.1GDI+概述(续),基本结构Point表示某个特定位置相对于原点的水平和垂直距离。例如:Pointp=newPoint(1,1);Size也有两个整型属性来表示水平和垂直距离Width和Height。例如:Sizes=newSize(5,5);Rectangle用来指定矩形的坐标,它由一个Point和一个Size组成,其中Point表示矩形左上角,Size表示矩形大小。,基本结构,Point点结构Point和PointF表示某个特定位置相对于原点的水平和垂直距离。有两个成员:X,Y,表示x轴和y轴的坐标。常用构造函数如下:Pointp1=newPoint(intX,intY);/X,Y为整数,表示在二维平面中定义点的、整数X和Y坐标的有序对。PointFp2=newPointF(floatX,floaY);/X,Y为浮点数/float类型是为了支持坐标不是点距的单位,Size结构Size和SizeF用来描述对象宽和高,有成员Width和Height。常用构造函数如下:/坐标系统可以转换,坐标单位可以不是点距Size(intwidth,intheight);/float类型是为了支持坐标不是点距的单位/(例如单位为mm)SizeF(floatwidth,floatheight);,基本结构,Rectangle矩形结构Rectangle和RectangleF用来描述一个矩形,常用属性和方法如下:属性X、Y和只读属性Left、Top、Right和Bottom:属性Width、Height和只读属性Size:构造函数Rectangle(Pointlocation,Sizesize):Rectangle(intX,intY,intwidth,intheight):,基本结构,8.1.1GDI+概述(续),基本结构例如:1)在构造函数中分别指定x坐标、y坐标、宽度和高度。Rectangler1=newRectangle(1,2,5,6);2)在构造函数中指定Point位置和Size结构。Pointp=newPoint(1,2);Sizes=newSize(5,6);Rectangler2=newRectangle(p,s);,8.1.1GDI+概述(续),坐标系默认情况下,坐标系的原点在绘图设备的左上角,x轴正方向水平向右,y轴正方向水平垂直向下。默认绘图单位为像素。也可以指定其他绘图单位。,Graphics对象是GDI+绘图中的核心对象。要使用计算机绘图,必须首先创建Graphics对象,然后利用这个对象绘制直线、曲线、椭圆等图形图像。绘图程序的一般步骤:(1)创建Graphics对象(2)使用Graphics对象的方法绘图、显示文本或处理图像。通常用三种方法创建Graphics对象:注意:Graphics类是密封类,不能有派生类。,8.1.1GDI+概述(续),8.1.2Graphics类,三种常见的创建Graphics对象的方法。1.在窗体或控件的Paint事件中获取Graphics对象。每一个窗体或控件都有一个Paint事件,该事件的参数中包含了当前窗体或控件的Graphics对象,在为窗体或控件创建绘制代码时,一般使用此方法来获取对图形对象的引用。例如:privatevoidForm1_Paint()Graphicsg=e.Graphics;也可以重载窗体的OnPaint方法protectedoverridevoidOnPaint(PaintEventArgse)Graphicsg=e.Graphics;,8.1.2Graphics类(续),2.通过当前窗体的CreateGraphics方法,把当前窗体的画笔、字体、颜色作为默认值,获取对Graphics对象的引用。注意这种对象只有在处理当前Windows窗口消息的过程中有效。如果想在已存在的窗体或控件上绘图,可以使用此方法。例如:Graphicsg=this.CreateGraphics();注意:此时以this所代表的窗体为画布,也可以使用其他控件对象的引用,创建以控件对象为画布的Graphics对象。,3.从继承自图像的任何对象创建Graphics对象,例如:BitmapmyBitmap=newBitmap(C:mytest1PicsmyPic.bmp);Graphicsg=Graphics.FromImage(myBitmap);此方法在需要更改已存在的图像时十分有用。注意:此时以文件“myPic.bmp为画布,使用g进行绘制图形时,其图形是绘制在文件“myPic.bmp”上的。,8.1.1GDI+概述(续),8.1.3颜色,颜色是进行图形操作的基本要素。颜色封装在System.Drawing.Color结构中。人眼可以分辨的任何颜色都是由一定的红、绿、蓝三色光组成。任何一种颜色都可以有四个分量,每个分量占一个字节:R:红色,取值范围0255,0表示没有红色成分,255为饱和红色;G:绿色,取值范围0255,0表示没有绿色成分,255为饱和绿色;B:蓝色,取值范围0255,0表示没有蓝色成分,255为饱和蓝色;A:Alpha值,即透明度,取值范围0255,0表示完全透明,255表示完全不透明。,8.1.3颜色(续),在代码中声明颜色的方式常用有两种:1.调用静态方法Color.FromArgb()指定任意颜色,这种方法有两种常用形式。第一种形式为直接指定三种颜色,方法原型为:PublicstaticColorFromArgb(intred,intgreen,intblue);三个参数分别表示R、G、B三色,Alpha值使用默认值255,即完全不透明。例如:Colorred=Color.FromArgb(255,0,0);第二种形式为四个参数,方法原型为:PublicstaticColorFromArgb(intalpha,intred,intgreen,intblue);四个参数分别表示透明度、R、G、B三色值。,8.1.3颜色(续),2.系统预定义颜色System.Drawing.Color结构中提供了许多静态性,每个属性返回一个命名颜色,在Color结构中已经预定义了141种颜色,可以直接使用。例如:this.BackColor=Color.White;,【例】本例创建3个半透明的红、绿、蓝刷子,填充3个矩形,请注意例子中透明度及颜色使用的方法。privatevoidForm1_Paint(objectsender,PaintEventArgse)Graphicsg=e.Graphics;SolidBrushRedBrush=newSolidBrush(Color.FromArgb(128,255,0,0);/半透明,试试255SolidBrushGreenBrush=newSolidBrush(Color.FromArgb(128,0,255,0);SolidBrushBlueBrush=newSolidBrush(Color.FromArgb(128,0,0,255);g.FillRectangle(RedBrush,0,0,80,80);g.FillRectangle(GreenBrush,40,0,80,80);g.FillRectangle(BlueBrush,20,20,80,80);,8.1.3颜色(续),8.1.4Paint事件,任何一个控件(包括窗体),系统都提供了对应的Paint事件。如果在控件的Paint事件中利用传递的参数获取Graphics对象,则绘制的图形图像仅在该控件内显示。在各种绘制命令中,坐标原点都是相对的。例如(1)在控件的Paint事件中绘制,控件的左上角为(0,0)点。(2)在窗体的Paint事件中绘制,(0,0)点在窗体的左上角。,例:画一个边界为红色,内部填充为蓝色的圆privatevoidbutton1_Click(objectsender,EventArgse)/1、得到窗体使用的Graphics类对象方法1Graphicsg=this.CreateGraphics();/2、创建红色的笔对象Penpen1=newPen(Color.Red);/3、创建蓝色的刷子对象SolidBrushbrush1=newSolidBrush(Color.Blue);/4、用红色笔在窗体中画矩形内切圆的边界g.DrawEllipse(pen1,10,10,100,100);/用蓝色刷子填充矩形内切圆的内部g.FillEllipse(brush1,10,10,100,100);,使用Graphics类绘图的基本步骤,窗体的Paint事件,运行上例,单击按钮,出现边界为红色,内部填充为蓝色的圆。问题:最小化后再最大化,图形消失!原因:这是因为当窗体被遮挡,操作系统不保存被被遮挡的内容。而是由应用程序自己恢复被遮挡的用户区内容。当被遮挡用户区内容恢复可见时,Windows操作系统向应用程序发送Paint事件,我们只考虑用户区,窗体的标题、边框由Windows负责。Form类窗体不能自动响应Paint事件,程序员必须生成Paint事件处理函数。,privatevoidForm1_Paint(objectsender,PaintEventArgse)/得到窗体的使用的Graphics类对象方法2,Graphicsg=e.Graphics;Penpen1=newPen(Color.Red);SolidBrushbrush1=newSolidBrush(Color.Blue);g.DrawEllipse(pen1,10,10,100,100);g.FillEllipse(brush1,10,10,100,100);运行后,出现边界为红色,内部填充蓝色的圆。最小化后,再最大化,图形不消失。,在.NET中,GDI+的所有绘图功能都包括在System、System.Drawing、System.Drawing.Imaging、System.Drawing.Darwing2D和System.Drawing.Text等命名空间中,因此在开始用GDI+类之前,需要先引用相应的命名空间。,8.2绘制基本图形,8.2.1创建画笔画笔:画笔是Pen类的实例,用于绘制各种基本图形。下面的示例说明如何创建一支基本的蓝色画笔:PenmyPen=newPen(Color.Blue);PenmyPen=newPen(Color.Blue,10.5f);也可以从画刷对象创建画笔对象,例如:SolidBrushmyBrush=newSolidBrush(Color.Red);PenmyPen=newPen(myBrush);PenmyPen=newPen(myBrush,5);创建画笔后,即可使用它来绘制直线、曲线或空心的轮廓形状。还可以修改画笔的各种属性,例如使用【Width】属性修改画笔的宽度;,8.2.2绘制直线,所有绘制图形的方法都位于Graphics中。1绘制直线的方法DrawLine方法:绘制一条直线,常用形式:1)绘制一条连接指定两个Point结构的线。publicvoidDrawLine(Penpen,Pointpt1,Pointpt2)其中,Pen对象确定线条的颜色、宽度和样式;Point结构确定起点和终点。2)绘制一条由坐标对指定的两个点的线。publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2)其中,Pen对象确定线条的颜色、宽度和样式;x1,y1为起点坐标,x2,y2为终点坐标。,8.2.2绘制直线,1绘制直线的方法(续)DrawLines方法的常用语法为publicvoidDrawLines(Penpen,Pointpoints)其中,Pen对象确定线条的颜色、宽度和样式;数组中的第一个点指定起始点,后面的每个点都以相临的前一个点为起始点组成线段。,8.2.2绘制直线,2定义画笔线帽在.NET框架中,有一个LineCap枚举,该枚举用于指定系统预定义的线帽,例如圆形、方形、三角形、菱形、箭头等。在System.Drawing.Drawing2D命名空间下,有一个AdjustableArrowCap类,利用该类可以自定义箭头线帽的形状。AdjustableArrowCaparrow=newAdjustableArrowCap(8,10,false);PenmyPen=newPen(Color.Blue,2);myPen.CustomEndCap=arrow;通过设置画笔的【CustomStartCap】属性或者【CustomEndCap】属性来自定义画笔线帽的形状和大小。,8.2.2绘制直线,3自定义坐标系默认情况下(1)屏幕坐标是以屏幕左上角为(0,0)点(2)向右为x轴正方向,向下为y轴正方向。坐标平移Graphics类提供的TranslateTransform方法可实现坐标平移。TranslateTransform方法的常用形式为publicvoidTranslateTransform(floatdx,floatdy)其中,dx表示平移的x分量,dy表示平移的y分量。,8.2.2绘制直线,【例8-1】用毫米作为度量单位,绘制一条数学上使用的坐标轴,即让坐标系的原点位于窗体中心,横向从左到右为x正方向,纵向从下到上为y轴正方向,然后在此坐标系统下绘制一条从(0,0)点到(20,20)的直线。运行效果如下:,8.2.2绘制直线,【例8-2】利用DrawLines方法和将根据正弦函数计算出来的多个点之间用直线依次相连,构成正弦曲线显示出来。设计界面和运行界面如下:,8.2.3矩形,绘制矩形的方法:(1)根据指定的矩形结构publicvoidDrawRectangle(Penpen,Rectanglerect)(2)通过矩形的左上角坐标(x,y)和宽、高publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight)(3)矩形数组rects来绘制多个矩形publicvoidDrawRectangles(Penpen,Rectanglerects),8.2.3矩形,【例8-3】演示矩形的绘制方法。运行效果如下:,8.2.4多边形,多边形:是由3条或3条以上的边组成的闭合图形。例如:三角形、矩形、五边形和六边形等都属于多边形。DrawPolygon方法:绘制多边形的轮廓DrawPolygon方法一般用于绘制多边形的轮廓,该方法常用形式如下:publicvoidDrawPolygon(Penpen,Pointpoints),8.2.4多边形,【例8-4】演示多边形的绘制方法。设计界面和运行效果如下:,8.2.5曲线,DrawCurve方法:用光滑的曲线把给定的点连接起来,常用形式有:1)publicvoidDrawCurve(Penpen,Pointpoints)其中,Point结构类型的数组中指明各节点,默认弯曲强度为0.5。注意,数组中至少要有3个元素。2)publicvoidDrawCurve(Penpen,Pointpoints,floattension)其中,tension指定弯曲强度,该值范围为0.0f-1.0f,超出此范围会产生异常。当弯曲强度为零时,就是直线。,8.2.5曲线(续),2.DrawClosedCurve方法通过连接数组中节点画一个平滑的曲线,此方法会自动把首尾节点连接起来构成封闭曲线。注意数组中的节点至少要有3个点组成,默认弯曲强度为0.5。1)publicvoidDrawClosedCurve(Penpen,Pointpoints)其中,Point结构类型的数组中指明各节点。2)publicvoidDrawClosedCurve(Penpen,Pointpoints,floattensionFillModefillmode)其中,fillmode指明曲线封闭区域内以何种方式填充。,8.2.5曲线(续),3.贝塞尔曲线每段贝塞尔曲线由4个点组成,两个端点(p1为起点,p2为终点)和两个控制点(c1和c2)。曲线不经过控制点,但是控制点如同一个磁体吸引曲线,影响并引导曲线向某个方向拉伸。,8.2.5曲线(续),1)DrawBezier方法:绘制一段贝塞尔曲线的,常用形式:publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4)其中pt1、pt2、pt3和pt4分别指定四个点。2)DrawBeziers方法:绘制多段贝塞尔曲线,常用形式:publicvoidDrawBezier(Penpen,Pointpoints)其中points是Point结构的数组,第一段贝塞尔曲线由点数组中的第1-4个点绘制而成。以后每段曲线只需要3个点:2个控制点和一个结束点。前一段曲线的结束点会自动被用作后一段曲线的起始点。,8.2.5曲线(续),【例8-5】绘制曲线示例。,8.2.6绘制椭圆和扇形,1.绘制椭圆(DrawEllipse方法)1)给定椭圆左上角坐标和椭圆的外接矩形的宽度和高度publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);其中,pen为Pen对象,x,y为椭圆外接矩形左上角的坐标,width定义椭圆外接矩形的宽度,height定义椭圆外接矩形的高度。2)给定椭圆外接矩形的结构publicvoidDrawEllipse(Penpen,Rectanglerect);其中,rect为Rectangle结构,用于确定椭圆的边界。,8.2.6绘制椭圆和扇形,2.绘制扇形(DrawPie方法)1)publicvoidDrawpie(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);其中,pen为Pen对象,x,y为椭圆外接左上角的坐标,width定义扇形外接矩形的宽度,height定义扇形外接矩形的高度,startAngle为起始角度(以度为单位),sweepAngle为延伸角度。2)publicvoidDrawPie(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle);其中,rect为Rectangle结构,用于确定扇形的外接矩形。,8.2.6绘制椭圆和扇形,【例8-6】演示椭圆和扇形的绘制方法。运行效果如下:,8.3填充图形,对于封闭的图形:封闭图形包括矩形、椭圆、多边形、封闭的曲线、扇形等基本图形。Draw方法绘制以“Fill”为前缀的方法完成填充,例如:与椭圆对应的填充方法为FillEllipse方法。与多边形对应的填充方法为FillPolygon方法等。,8.3.1画刷(续),画刷(Brush)画刷是可以与Graphics对象一起使用来创建实心形状和呈现文本的对象。可以用来填充各种图形形状,如矩形、椭圆、饼型图和多边形等。下表列出了几种不同类型的画刷。,8.3.2单色画刷,1)使用SolidBrush类定义单色画刷SolidBrush类用于定义单色画刷。该类可以填充图形,比如矩形、椭圆、多边形和路径。例如:SolidBrushsolidBrush=newSolidBrush(Color.Red);Rectangler=newRectangle(5,10,100,100);g.FillEllipse(solidBrush,r);,8.3.2单色画刷,【例8-7】单色画刷演示示例。,运行结果如右图所示:,8.3.3创建渐变画刷(续),2)使用LinearGradientBrush类定义线性渐变LinearGradientBrush对象用颜色线性渐变填充图形。提供了三种构造函数:(1)提供两个点和两种颜色。PublicLinearGradientBrush(Pointpoint1,Pointpoint2,Colorcolor1,Colorcolor2)(2)提供一个矩形和一个角度。PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,floatangle)(3)指定渐变的模式。PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,LinearGradientModelinearGradientMode),8.3.3渐变画刷(续),【例8-8】颜色渐变效果。运行效果:,8.3.4填充阴影,3)使用HatchBrush类填充简单图案HatchBrush类提供的画刷可以用各种图案填充图形。通过Hatch类型可以设置影线样式。在创建影线的画刷时,能设定前景色、背景色和影线样式。有56种不同的影线样式枚举,该枚举可以参看System.Drawing.Drawing2D.HatchStyle枚举。例如:HatchStyle.Horizontal水平线的图案HatchStyle.ForwardDiagonal从左上到右下的对角线的线条图案HatchStyle.DiagonalBrick具有分层砖块外观的阴影HatchStyle.Shingle带有对角分层鹅卵石外观的阴影HatchStyle.Sphere具有球体彼此相邻放置的外观的阴影,8.3.4填充阴影,【例8-9】阴影效果示例。效果如下:,8.3.5填充纹理,4)使用TextureBrush类填充复杂图像TextureBrush类使用图像作为填充的样式,它可以使用例如.bmp、.jpg、.png等格式的图像。初始化一个新的TextureBrush对象需要指定填充的图像。publicTextureBrush(Imageimage,Rectanglerect)publicTextureBrush(Imageimage,WrapModewrapMode,Rectanglerect)其中,image指定要填充的图像;rect指定图像的矩形块;wrapMode指定如何填充图像,枚举类型,8.3.5填充纹理,【例8-10】创建TextureBrush示例。运行效果如下:,8.3.6填充路径,5)使用PathGradientBrush类实现彩色渐变1GraphicsPath类GraphicsPath类用于创建路径。利用GraphicsPath类,可以绘制形状的轮廓、填充形状内部和创建剪辑区域。下面的代码创建一个路径并在路径中添加一个椭圆。GraphicsPathpath=newGraphicsPath();path.AddEllipse(this.ClientRectangle);2PathGradientBrush类PathGradientBrush称为路径渐变画刷,路径渐变画刷用于从中心向四周通过颜色渐变来填充路径的内部区域。,8.3.6填充路径,【例8-11】路径和路径画刷的使用示例。运行效果:,本章综合举例柱状图和饼状图绘制,柱状图实现要点确定柱子左上角顶点的坐标确定柱子的高度填充矩形柱子饼状图实现要点确定每个部分所占的比例,以及相应的延伸角度从第一部分开始,顺时针绘制扇形填充扇形,第8章图形图像处理,8.1图形图像基础知识8.2绘制基本图形8.3填充图形8.4图像处理8.5图形与图像的平移、旋转与缩放8.6文字处理,8.4图像处理,对图像的处理主要有:从文件或其他地方加载图像或创建一个新的图像显示图像修改图像把内存中的图像保存到文件和其他存储器中。,8.4.1图像的绘制,1.图像的显示GDI+提供了两个类表示图像:Bitmap类和Metafile类。Bitmap类:提供了处理位图的功能Metafile类:提供了处理矢量图的功能显示步骤:从文件中读取一个位图并在屏幕中显示图像需要三个步骤:创建一个Bitmap对象指明要显示的图像文件;创建一个Graphics对象表明要使用绘图平面;通过调用Graphics对象的DrawImage方法显示图像。,8.4.1图像的绘制,1)创建Bitmap对象Bitmap类有很多重载的构造函数,其中常用的有:PublicBitmap(stringfilename)其中filename是图像文件的名字。可以利用该构造函数创建Bitmap对象。例如:Bitmapbitmap=newBitmap(filename.jpg);2)DrawImage方法Graphics类的DrawImage方法用于在指定位置显示原始图像或者缩放后的图像。该方法的重载形式也非常多,其中常用的一种为:PublicvoidDrawImage(Imageimage,intx,inty,intwidth,intheight)该方法在(x,y)位置点按指定的大小显示图像。利用此方法可以使由image对象表示的图像被缩放为rect矩形的尺寸。,8.4.1图像的绘制,【例8-12】图像绘制功能。运行效果:,8.4.2图像的保存,在窗体上绘制出图形或图像后,利用Image对象的Save方法可以将绘制的内容保存到文件中。publicvoidSave(stringfilename,ImageFormatformat)其中,fileName为所要保存的文件名。format为保存的图像类型,图像类型由ImageFormat类的属性来指定注意:要将绘制的信息(图形或者图像)保存到图像文件中,其对应的Graphics对象应该从Image对象获取,例如:Graphicsg=Graphics.FromImage(image);其中,image为任何从Image类继承的对象,例如Bitmap对象。,从image对象得到Graphics对象后,在其中绘制的所有图形和图像都会保存在该image对象中,然后再保存该对象到文件中即可。,Imaging.ImageFormat支持的格式,Imaging.ImageFormat支持的格式,8.4.2图像的保存,【例8-13】将绘制的图形和图像保存到文件中。设计界面和绘制效果如下:,8.4.3图像的拉伸与反转变换,【例8-14】图像变换演示。设计界面如下:,8.5图像的平移、旋转和缩放,1.TranslateTransform方法常用形式:publicvoidTranslateTransform(floatdx,floatdy)其中dx表示平移的x分量,dy表示平移的y分量。2.RotateTransform方法常用形式:publicvoidRotateTransform(floatangle)其中angle表示旋转角度。3.ScaleTransform方法常用形式:publicvoidScaleTransform(floatsx,floatsy)其中sx表示x方向缩放比例,sy表示y方向缩放的比例。,8.5图像的平移、旋转和缩放,【例8-15】图像的平移、旋转和缩放演示。运行效果如下:,8.6文字处理,Graphics类提供的DrawString方法来实现一些文字的特殊效果。DrawString方法的常用形式为:publicvoidDrawString(strings,Fontfont,Brushbrush,PointFpoint,StringFormatformat)参数说明:s:要绘制的字符串font指定字符串所用的字体brush指定字符串的颜色和纹理point指定所绘制的字符串的左上角位置format指定应用于字符串的格式化属性(如行距和对齐方式),8.6文字处理,【例8-16】演示文字绘制效果。运行效果为:,本章实验与习题,作业:1、2,
展开阅读全文