您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > C# 第14章 图形图像与多媒体编程
1第十四章图形图像与多媒体编程14.1GDI+概述14.2绘制图形14.3图像的显示与保存14.4动画设计14.5Web应用程序中的图形图像操作14.6音频与视频播放214.1GDI+概述GDI+:GraphicsDeviceInterfacePlus,它提供了各种丰富的图形图像处理功能在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用DirectX处理三维(3D)的图形图像。GDI+主要有“二维矢量图形”、“图像处理”和“版式”三部分组成。GDI+提供了存储基元自身相关信息的类和结构、存储基元绘制方式相关信息的类,以及实际进行绘制的类。GDI+为使用各种字体、字号和样式来显示文本这种复杂任务提供了大量的支持。其他高级功能3在C#中,所有图形图像处理功能都包含在以下名称空间下:1.System.Drawing名称空间提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等。2.System.Drawing.Drawing2D名称空间提供了高级的二维和矢量图形功能。主要有梯度型画刷、Matrix类(用于定义几何变换)和GraphicsPath类等。3.System.Drawing.Imaging名称空间提供了高级GDI+图像处理功能。4.System.Drawing.Text名称空间提供了高级GDI+字体和文本排版功能414.1.1Graphics类Graphics类包含在System.Drawing名称空间下。要进行图形处理,必须首先创建Graphics对象,然后才能利用它进行各种画图操作。创建Graphics对象的形式有:1.在窗体或控件的Paint事件中直接引用Graphics对象每一个窗体或控件都有一个Paint事件,该事件的参数中包含了当前窗体或控件的Graphics对象,在为窗体或控件创建绘制代码时,一般使用此方法来获取对图形对象的引用。PrivatevoidForm_Paint(objectsender,System.Windows.Forms.PaintEventArgse){Graphicsg=e.Graphics;……}52.从当前窗体获取对Graphics对象的引用把当前窗体的画刷、字体、颜色作为缺省值获取对Graphics对象的引用,注意这种对象只有在处理当前Windows窗口消息的过程中有效。如果想在已存在的窗体或控件上绘图,可以使用此方法。例如:Graphicsg=this.CreatGraphics();……3.从继承自图像的任何对象创建Graphics对象。此方法在需要更改已存在的图像时十分有用。例如:Bitmapbitmap=newBitmap(@C:\test\a1.bmp);Graphicsg=Graphics.FromImage(bitmap);614.1.2颜色颜色是进行图形操作的基本要素。任何一种颜色都可以由四个分量决定,每个分量占据一个字节:R:红色,取值范围0~255,255为饱和红色。G:绿色,取值范围0~255,255为饱和绿色。B:蓝色,取值范围0~255,255为饱和蓝色。A:Alpha值,即透明度。取值范围0~255,0为完全透明,255为完全不透明。在System.Drawing名称空间下,有一个Color结构类型,可以使用下列方法创建颜色对象:⑴使用FromArgb指定任意颜色这个方法有两种常用的形式,第一种形式是直接指定三种颜色,方法原型为:7publicstaticColorFromArgb(intred,intgreen,intblue)三个参数分别表示R、G、B三色,Alpha值使用缺省值255,即完全不透明。例如:Colorred=Color.FromArgb(255,0,0);Colorgreen=Color.FromArgb(0,255,0);Colorblue=Color.FromArgb(0,0,0xff);其中,0xff为十六进制表示形式。第二种形式使用四个参数,格式为:publicstaticColorFromArgb(intalpha,intred,intgreen,intblue)四个参数分别表示透明度和R、G、B三色值。8⑵使用系统预定义颜色在Color结构中已经预定义了141种颜色,可以直接使用,例如:ColormyColor;myColor=Color.Red;myColor=Color.Aquamarine;myColor=Color.LightGoldenrodYellow;914.1.3笔和画笔在GDI+中,可使用笔对象和画笔对象呈现图形、文本和图像。笔是Pen类的实例,用于绘制线条和空心形状。画笔是从Brush类派生的任何类的实例,用于填充形状或绘制文本。1.笔(Pen)笔可用于绘制绘制具有指定宽度和样式的线条、曲线以及勾勒形状轮廓。下面的示例说明如何创建一支基本的黑色笔:PenmyPen=newPen(Color.Black);PenmyPen=newPen(Color.Black,5);也可以从画笔对象创建笔,例如:SolidBrushmyBrush=newSolidBrush(Color.Red);PenmyPen=newPen(myBrush);PenmyPen=newPen(myBrush,5);10笔(Pen)的用法演示示例。1)新建一个Windows应用程序,适当加宽窗体宽度。然后切换到代码方式,添加名称空间引用:usingSystem.Drawing.Drawing2D;2)添加Form1_Paint事件代码。privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){Graphicsg=e.Graphics;Penpen=newPen(Color.Blue,10.5f);g.DrawString(蓝色,宽度为10.5,this.Font,newSolidBrush(Color.Black),5,5);g.DrawLine(pen,newPoint(110,10),newPoint(380,10));pen.Width=2;pen.Color=Color.Red;g.DrawString(红色,宽度为2,this.Font,newSolidBrush(Color.Black),5,25);11g.DrawLine(pen,newPoint(110,30),newPoint(380,30));pen.StartCap=LineCap.Flat;pen.EndCap=LineCap.ArrowAnchor;pen.Width=9;g.DrawString(红色箭头线,this.Font,newSolidBrush(Color.Black),5,45);g.DrawLine(pen,newPoint(110,50),newPoint(380,50));pen.DashStyle=DashStyle.Custom;pen.DashPattern=newfloat[]{4,4};pen.Width=2;pen.EndCap=LineCap.NoAnchor;g.DrawString(自定义虚线,this.Font,newSolidBrush(Color.Black),5,65);g.DrawLine(pen,newPoint(110,40),newPoint(380,70));pen.DashStyle=DashStyle.Dot;g.DrawString(点划线,this.Font,newSolidBrush(Color.Black),5,85);g.DrawLine(pen,newPoint(110,90),newPoint(380,90));}12运行结果132、画刷(Brush)画刷是可与Graphics对象一起使用来创建实心形状和呈现文本的对象。可以用画笔填充各种图形形状,如矩形、椭圆、扇形、多边形和封闭路径等。几种不同类型的画刷:SolidBrush画刷最简单的形式,用纯色进行绘制。HatchBrush类似于SolidBrush,但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色。TextureBrush使用纹理(如图像)进行绘制。LinearGradientBrush使用沿渐变混合的两种颜色进行绘制。PathGradientBrush基于编程者定义的唯一路径,使用复杂的混合色渐变进行绘制。14(1)使用SolidBrush类定义单色画笔SolidBrush类用于定义单色画笔。该类只有一个构造函数,带有一个Color类型的参数。下面的示例说明如何在窗体上绘制一个纯红色的椭圆。该椭圆将符合为其提供的矩形的大小(此例中为表示整个窗体的ClientRectangle)。【例】单色画刷演示示例。privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){Graphicsg=e.Graphics;SolidBrushmyBrush=newSolidBrush(Color.Red);g.FillEllipse(myBrush,this.ClientRectangle);}15运行效果16(2)使用HatchBrush类绘制简单图案HatchBrush类用于从大量预设的图案中选择绘制时要使用的图案,而不是纯色。下面的示例说明如何创建一个HatchBrush,它使用90%的阴影,前景色与背景色的比例为90:100,并使用白色作为前景色,黑色作为背景色。【例】填充简单图案示例。privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){Graphicsg=e.Graphics;System.Drawing.Drawing2D.HatchBrushaHatchBrush=newSystem.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.Percent90,Color.White,Color.Black);g.FillEllipse(aHatchBrush,this.ClientRectangle);}17运行效果:18(3)使用TextureBrush类绘制复杂图案TextureBrush类允许使用一幅图像作为填充的样式。该类提供了5个重载的构造函数,分别是:PublicTextureBrush(Image)PublicTextureBrush(Image,Rectangle)PublicTextureBrush(Image,WrapMode)PublicTextureBrush(Image,Rectangle,ImageAttributes)PublicTextureBrush(Image,WrapMode,Rectangle)其中:Image:Image对象用于指定画笔的填充图案。Rectangle:Rectangle对象用于指定图像上用于画笔的矩形区域,其位置不能超越图像的范围。WrapMode:WrapMode枚举成员用于指定如何排布图像,可以是Clamp完全由绘制对象的边框决定Tile平铺TileFlipX水平方向翻转并平铺图像TileFlipY垂直方向翻转并平铺图像TileFlipXY水平和垂直方向翻转并平铺图像19ImageAttributes:ImageAttributes对象用于指定图像的附加特性参数。TextureBrush类有三个属性:Image:Image类型,与画笔关联的图像对象。Transform:Matrix类型,画笔的变换矩阵。WrapMode:WrapMo
本文标题:C# 第14章 图形图像与多媒体编程
链接地址:https://www.777doc.com/doc-1468376 .html