第8章-图形图像处理ppt课件_第1页
第8章-图形图像处理ppt课件_第2页
第8章-图形图像处理ppt课件_第3页
第8章-图形图像处理ppt课件_第4页
第8章-图形图像处理ppt课件_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第8章图形图像处理,8.1图形图像基础知识8.2绘制基本图形8.3填充图形8.4图像处理8.5图形与图像的平移、旋转与缩放8.6文字处理,.,本章综合举例1柱状图绘制(E01DrawShapeFormRectangle),.,本章综合举例2饼状图绘制(E01DrawShapeFormDrawArc),.,本章综合举例3生成校验码(E01DrawShapeFormValidateCode),.,本章综合举例4鼠标绘制图形(E02-EllipseObjectExampleForm1),本章综合举例5鼠标绘制图形(E02-EllipseObjectExampleFormPicture),.,折线图绘制,8.1图形图像绘制基础知识,8.1.1GDI+概述8.1.2Graphics类8.1.3颜色8.1.4Paint事件,8.1.1GDI+概述,1、GDI+简介2、.NET框架提供的类3、基本结构4、坐标系,.,1、GDI+简介,GDI+GraphicsDeviceInterface(图形设备接口)提供了高级图形图像处理功能;GDI+的托管类在C#中用于展现提供的图形图像处理功能的托管类;可以轻松实现颜色渐变、透明处理、纹理处理、拉伸和缩放等多种高级功能;GDI+主要提供了三类服务:二维矢量图形处理二维图像处理文字显示,.,2、.NET框架提供的类,System.Drawing名称空间提供对GDI+基本图形功能的访问;主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等;System.Drawing.Drawing2D名称空间提供高级的二维和矢量图形处理功能;主要有:梯度型画刷、Matrix类(用于定义几何变换)和GraphicsPath类等;System.Drawing.Imaging名称空间提供高级图像处理功能;System.Drawing.Text名称空间提供高级字体和文本排版功能;,.,3、GDI+中的基本结构,Point表示某个特定位置相对于原点的水平和垂直距离;例如:Pointp=newPoint(1,1);Size表示实体的大小,两个参数:宽度(Width)和高度(Height);例如:Sizes=newSize(5,5);Rectangle表示一个矩形,它由一个Point和一个Size组成,其中Point表示矩形左上角,Size表示矩形大小;,.,Rectangle的实例创建方式,在构造函数中,分别指定x坐标、y坐标、宽度和高度;例如:Rectangler1=newRectangle(1,2,5,6);矩形的左上角坐标(1,2),宽度为5,高度为6;在构造函数中,指定Point位置和Size结构;例如:Pointp=newPoint(1,2);Sizes=newSize(5,6);Rectangler2=newRectangle(p,s);此例中设置的矩形同上;,.,4、坐标系,默认情况下,坐标系的原点在绘图设备的左上角,x轴正方向水平向右,y轴正方向水平垂直向下。默认绘图单位为像素,也可以指定其他绘图单位。,.,8.1.2Graphics类,绘制图形图像步骤先必须创建Graphics对象;再利用这个对象绘制直线、曲线、椭圆等图形图像;创建Graphics对象的三种方法在窗体或控件的Paint事件中获取Graphics对象;从继承自图像的任何对象创建Graphics对象;通过当前窗体的CreateGraphics方法,把当前窗体的画笔、字体、颜色作为默认值,获取对Graphics对象的引用;,privatevoidForm1_Paint()Graphicsg=e.Graphics;,Graphicsg=this.CreateGraphics();,BitmapmyBitmap=newBitmap(C:mytest1PicsmyPic.bmp);Graphicsg=Graphics.FromImage(myBitmap);,课堂例题,.,8.1.3颜色,颜色封装在System.Drawing.Color结构中;任何一种颜色都可以有四个分量:R:红色,取值范围0255;0表示没有红色成分,255为饱和红色;G:绿色,取值范围0255;0表示没有绿色成分,255为饱和绿色;B:蓝色,取值范围0255;0表示没有蓝色成分,255为饱和蓝色;A:Alpha值,即透明度,取值范围0255;0表示完全透明,255表示完全不透明。,.,代码中声明颜色的方式,调用静态方法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三色值。系统预定义颜色System.Drawing.Color结构中预定义了141种颜色,可直接使用。例如:this.BackColor=Color.White;,.,8.1.4Paint事件,任何一个控件(包括窗体),系统都提供了对应的Paint事件;Paint事件的触发时机:窗体加载、刷新、窗体大小改变、;注意:控件的paint事件中若采用参数e获取Graphics对象,则绘制的图形图像仅在该控件内显示。在各种绘制命令中,坐标原点都是相对的。例如:在控件的Paint事件中绘制,控件的左上角为(0,0)点;在窗体的Paint事件中绘制,(0,0)点在窗体的左上角。,8.2绘制基本图形,8.2.1创建画笔8.2.2绘制直线8.2.3绘制矩形8.2.4绘制多边形8.2.5绘制曲线8.2.6绘制椭圆和扇形,所有绘制图形的方法Draw都位于System.Drawing.Graphics类中,.,8.2.1创建画笔,画笔:Pen类的实例,用于绘制各种基本图形;画笔的创建利用构造函数创建形式1:PenmyPen=newPen(Color.Blue);形式2:PenmyPen=newPen(Color.Blue,10.5f);从画刷对象创建画笔对象SolidBrushmyBrush=newSolidBrush(Color.Red);形式1:PenmyPen=newPen(myBrush);形式2:PenmyPen=newPen(myBrush,5);画笔常用的属性Width属性(画笔的宽度),8.2.2绘制直线,1、绘制直线的方法2、定义画笔线帽3、自定义坐标系,.,1、绘制直线的方法,DrawLine方法:绘制一条直线;绘制一条连接指定两个Point结构的线。publicvoidDrawLine(Penpen,Pointpt1,Pointpt2)Pen对象确定线条的颜色、宽度和样式;Point结构确定起点和终点;绘制一条由坐标对指定的两个点的线。publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2)x1,y1为起点坐标,x2,y2为终点坐标;DrawLines方法:publicvoidDrawLines(Penpen,Pointpoints)points数组每个点依次相连,绘制折线或图形;,.,2、定义画笔线帽,LineCap枚举类型包含.NET框架中,系统预定义的线帽;例如,圆形、方形、三角形、菱形、箭头等;使用举例:AdjustableArrowCap类在System.Drawing.Drawing2D命名空间下;利用该类可以自定义箭头线帽的形状;语法:publicAdjustableArrowCap(floatwidth,floatheight,boolisFilled);指定箭头线帽的宽度、高度、是否填充;,Penpen1=newPen(Color.Red,5);pen1.EndCap=LineCap.ArrowAnchor;g.DrawLine(pen1,points0,points1);,.,自定义画笔线帽使用方法,自定义画笔线帽的步骤创建一个AdjustableArrowCap类的实例,指定箭头的大小,以及是否填充;设置画笔实例的CustomStartCap属性或者CustomEndCap属性;使用该画笔绘制图形即可看到线帽形状;举例,AdjustableArrowCaparrow=newAdjustableArrowCap(5,5,true);Penpen1=newPen(Color.Red,5);pen1.CustomEndCap=arrow;g.DrawLine(pen1,points0,points1);,.,3、自定义坐标系,默认情况下的坐标系屏幕坐标是以屏幕左上角为(0,0)点;向右为x轴正方向,向下为y轴正方向;坐标平移Graphics类提供的TranslateTransform方法可实现坐标平移;语法:publicvoidTranslateTransform(floatdx,floatdy)dx表示平移的x分量,dy表示平移的y分量;举例:,Graphicsg=e.Graphics;g.TranslateTransform(this.Width/2,this.Height/2);Penpen=newPen(Color.Red,5);g.DrawLine(pen,10,10,50,50);,.,P173【例8-1】用毫米作为度量单位,绘制一条数学上使用的坐标轴,即让坐标系的原点位于窗体中心,横向从左到右为x正方向,纵向从下到上为y轴正方向,然后在此坐标系统下绘制一条从(0,0)点到(20,20)的直线。,Coordinate(数学坐标)类的定义;Form1的Form1_Paint事件中先调用Coordinate类的GetCoordinate静态方法,绘制坐标系;再使用红色的画笔,在坐标系中绘制直线;,.,P175【例8-2】利用DrawLines方法和将根据正弦函数计算出来的多个点之间用直线依次相连,构成正弦曲线显示出来。,定义枚举值enumDrawModeSin,None;两个button的Click事件更改DrawMode类型变量的状态;对panel进行refresh,重新绘制图形;panel的Paint事件先判断DrawMode类型变量的值;再清除或绘制在panel中的图形;,.,8.2.3矩形,绘制矩形的方法DrawRectangle根据指定的矩形结构publicvoidDrawRectangle(Penpen,Rectanglerect);通过矩形的左上角坐标(x,y)和宽、高publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight);矩形数组rects来绘制多个矩形publicvoidDrawRectangles(Penpen,Rectanglerects);,Rectanglerectangle=newRectangle(50,50,100,200);g.DrawRectangle(pen,rectangle);,g.DrawRectangle(pen,50,50,100,200);,Rectanglerectangles=newRectangle2;rectangles0=newRectangle(50,50,10,20);rectangles1=newRectangle(100,150,10,20);g.DrawRectangles(pen,rectangles);,.,P177【例8-3】演示矩形的绘制方法。,.,8.2.4多边形,多边形是由3条或3条以上的边组成的闭合图形;三角形、矩形、五边形和六边形等都属于多边形;DrawPolygon方法用于绘制多边形的轮廓;语法:publicvoidDrawPolygon(Penpen,Pointpoints)举例,Pointpoints=newPoint5;points0=newPoint(150,70);points1=newPoint(250,150);points2=newPoint(200,250);points3=newPoint(100,250);points4=newPoint(50,150);g.DrawPolygon(pen,points);,.,P178【例8-4】演示多边形的绘制方法。,8.2.5绘制曲线,1、DrawCurve方法2、DrawClosedCurve方法3、贝塞尔曲线,.,1、DrawCurve方法,DrawCurve方法用光滑的曲线把给定的点连接起来;publicvoidDrawCurve(Penpen,Pointpoints)Point数组中指明各节点,数组中至少要有3个元素;默认弯曲强度为0.5;publicvoidDrawCurve(Penpen,Pointpoints,floattension)tension指定弯曲强度,该值范围为0.0f-1.0f,超出此范围会产生异常。当弯曲强度为零时,就是直线。,.,2、DrawClosedCurve方法,DrawClosedCurve方法连接数组中节点画一个平滑曲线;此方法会自动把首尾节点连接起来构成封闭曲线;注意数组中的节点至少要有3个点组成,默认弯曲强度为0.5;DrawClosedCurve方法语法publicvoidDrawClosedCurve(Penpen,Pointpoints)Point结构类型的数组中指明各节点;publicvoidDrawClosedCurve(Penpen,Pointpoints,floattension,FillModefillmode)fillmode指明曲线封闭区域内以何种方式填充。,.,3、贝塞尔曲线,贝塞尔曲线特点每段贝塞尔曲线由4个点组成;两个端点(p1为起点,p2为终点)和两个控制点(c1和c2);曲线不经过控制点,但是控制点如同一个磁体吸引曲线,影响并引导曲线向某个方向拉伸。绘制方法DrawBezier方法:绘制一段贝塞尔曲线的;publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4)DrawBeziers方法:绘制多段贝塞尔曲线;publicvoidDrawBeziers(Penpen,Pointpoints)第一段贝塞尔曲线由点数组points中的第1-4个点绘制而成;以后每段曲线只需要3个点:2个控制点和一个结束点。前一段曲线的结束点会自动被用作后一段曲线的起始点。,.,P179【例8-5】绘制曲线示例。,8.2.6绘制椭圆和扇形,1、绘制椭圆2、绘制扇形,.,1、绘制椭圆(DrawEllipse方法),指定椭圆左上角坐标和椭圆外接矩形的宽度和高度进行绘制publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);pen为Pen对象,x,y为椭圆外接矩形左上角的坐标;width定义椭圆外接矩形的宽度;height定义椭圆外接矩形的高度。指定椭圆外接矩形进行绘制publicvoidDrawEllipse(Penpen,Rectanglerect);rect为Rectangle结构,用于确定椭圆的边界。,.,2、绘制扇形(DrawPie方法),指定扇形外接矩形的位置和扇形的起止角度publicvoidDrawpie(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);扇形外接矩形:x,y为左上角坐标;width宽度;height高度;startAngle为起始角度,以度为单位;sweepAngle为延伸角度;指定扇形外接矩形和扇形的起止角度publicvoidDrawPie(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle);rect为Rectangle结构,用于确定扇形的外接矩形;startAngle为起始角度,以度为单位;sweepAngle为延伸角度;,.,P181【例8-6】演示椭圆和扇形的绘制方法。,8.3填充图形,8.3.1创建画刷8.3.2填充单色8.3.3填充渐变色8.3.4填充阴影8.3.5填充纹理8.3.6填充路径,Draw为前缀的方法用于图形绘制;Fill为前缀的方法用于填充图形;,8.3.1创建画刷,画刷(Brush)是可以与Graphics对象一起使用来创建实心形状和呈现文本的对象;可以填充的图形形状,如矩形、椭圆、饼型图和多边形等。几种不同类型的画刷:,.,8.3.2填充单色画刷,SolidBrush类定义单色画刷;该类可以填充图形,比如矩形、椭圆、多边形和路径;SolidBrush画刷的构造函数publicSolidBrush(Colorcolor);指定画刷颜色SolidBrush类的使用调用Graphics对象的Fill方法,指定画刷实例即可;举例SolidBrushsolidBrush=newSolidBrush(Color.Red);Rectangler=newRectangle(5,10,100,100);g.FillEllipse(solidBrush,r);,.,P182【例8-7】单色画刷演示示例。,在Form窗体的Paint事件中调用FillEllipse、FillRectangle、FillPolygon、FillClosedCurve等方法,使用同一画刷和外接矩形进行图像绘制;外接矩形的使用:定义:Rectangler=newRectangle(10,10,100,100);将矩形位置沿x坐标偏移:r.Offset(110,0);,.,8.3.3填充渐变色,LinearGradientBrush类定义线性渐变画刷;LinearGradientBrush类的三种构造函数:提供两个点和两种颜色;PublicLinearGradientBrush(Pointpoint1,Pointpoint2,Colorcolor1,Colorcolor2);提供一个矩形、一个角度和两个颜色;PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,floatangle);指定一个矩形、渐变的模式和两个颜色;PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,LinearGradientModelinearGradientMode);,.,P183【例8-8】颜色渐变效果。,.,8.3.4填充阴影,HatchBrush类提供的画刷可以用各种图案填充图形;HatchBrush画刷的构造函数指定填充样式和线条颜色:publicHatchBrush(HatchStylehatchstyle,ColorforeColor);指定填充样式、线条颜色和背景色:publicHatchBrush(HatchStylehatchstyle,ColorforeColor,ColorbackColor);System.Drawing.Drawing2D.HatchStyle枚举类型共有56种不同的影线样式枚举值;Horizontal水平线的图案ForwardDiagonal从左上到右下的对角线的线条图案DiagonalBrick具有分层砖块外观的阴影Shingle带有对角分层鹅卵石外观的阴影Sphere具有球体彼此相邻放置的外观的阴影,.,P184【例8-9】阴影效果示例。,.,8.3.5填充纹理,TextureBrush类可使用图像作为填充的样式;可以使用例如.bmp、.jpg、.png等格式的图像;初始化一个新的TextureBrush对象需要指定填充的图像;TextureBrush类的常用构造函数publicTextureBrush(Imageimage);publicTextureBrush(Imageimage,Rectanglerect);publicTextureBrush(Imageimage,WrapModewrapMode,Rectanglerect)image指定要填充的图像;rect指定图像的矩形块;wrapMode指定如何填充图像,枚举类型;,.,P185【例8-10】创建TextureBrush示例。,.,8.3.6填充路径,GraphicsPath类用于创建路径;利用GraphicsPath类,可以绘制形状的轮廓、填充形状内部和创建剪辑区域;下面的代码创建一个路径并在路径中添加一个椭圆:GraphicsPathpath=newGraphicsPath();path.AddEllipse(this.ClientRectangle);PathGradientBrush类实现彩色渐变PathGradientBrush路径渐变画刷用于从中心向四周通过颜色渐变来填充路径的内部区域;,.,P186【例8-11】路径和路径画刷的使用示例。,.,本章综合举例柱状图和饼状图绘制,柱状图实现要点确定柱子左上角顶点的坐标确定柱子的高度填充矩形柱子饼状图实现要点确定每个部分所占的比例,以及相应的延伸角度从第一部分开始,顺时针绘制扇形填充扇形,8.4图像处理,8.4.1绘制图像8.4.2保存图像8.4.3图像的拉伸与反转变换,.,8.4.1图像的绘制,GDI+提供了两个表示图像的类Bitmap类:提供了处理位图的功能;Metafile类:提供了处理矢量图的功能;从文件中读取一个位图并在屏幕中显示图像需要三个步骤:创建一个Bitmap对象指明要显示的图像文件;Bitmap类的常用构造函数:PublicBitmap(stringfilename)创建一个Graphics对象表明要使用绘图平面;通过调用Graphics对象的DrawImage方法显示图像。DrawImage方法在指定位置显示原始图像或缩放后的图像;PublicvoidDrawImage(Imageimage,intx,inty,intwidth,intheight),.,绘制图像,实现代码1:Bitmapbitmap=newBitmap(panel1.Width,panel1.Height);Graphicsg=Graphics.FromImage(bitmap);g.DrawImage(Properties.Resources.校园风光6,panel1.ClientRectangle);panel1.BackgroundImage=bitmap;,实现代码2:Bitmapbitmap=newBitmap(Properties.Resources.校园风光6,panel1.Width,panel1.Height);Graphicsg=Graphics.FromImage(bitmap);g.DrawImage(bitmap,panel1.ClientRec

温馨提示

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

评论

0/150

提交评论