版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章图形、图像与多媒体GDI:GraphicsDeviceInterface图形图像及多媒体处理也是C#的重要应用。.NET框架通过封装GDI+实现了图形图像的处理功能。利用C#可以开发出强大的图形、图像与多媒体程序。
GDI+是Microsoft®Windows®XP操作系统的子系统,负责在屏幕和打印机上显示信息。顾名思义,GDI+是GDI(Windows早期版本提供的图形设备接口)的后续版本。GDI+是一种应用程序编程接口(API),通过一套部署为托管代码的类来展现。这套类被称为GDI+的“托管类接口”。应用程序的程序员可利用GDI+这样的图形设备接口在屏幕或打印机上显示信息,而不需要考虑特定显示设备的具体情况。应用程序的程序员调用GDI+类提供的方法,而这些方法又反过来相应地调用特定的设备驱动程序。GDI+将应用程序与图形硬件隔离,而正是这种隔离允许开发人员创建设备无关的应用程序。1版权所有目录GDI+概述GDI+绘图基础基本的绘图方法图像的显示与处理声音与视频的播放2版权所有4.1GDI+概述早期的Window程序中,可以使用GDI(GraphicsDeviceInterface,图形设备接口)在一个窗体中绘制图形、文本和图像,但它的功能有限。GDI+是GDI的一个新版本,它不仅在GDI基础上添加许多新特性,而且对原有的GDI功能进行优化,并在为开发人员提供的二维矢量图形、文本、图像处理、区域、路径以及图形数据矩阵等方面构造了一系列相关的类。其中,图形类Graphics是GDI+接口中的一个核心类,许多绘图操作都可用它完成。3版权所有4.1.1GDI+命名空间
GDI+包含大约60个类、50个枚举和8个结构。所有的函数都保存在System.Drwaing.dll程序集中。
System.Drawing命名空间提供了对GDI+基本图形功能的访问。在System.Drawing.Drawing2D、System.Drawing.Imaging
以及System.Drawing.Text
命名空间中提供了更高级的功能。System.Drawing.Drawing2D命名空间提供高级的二维和矢量图形功能。此命名空间包含梯度型画刷、Matrix
类(用于定义几何变换)和GraphicsPath
类。
System.Drawing.Design命名空间:包含扩展设计时用户界面(UI)逻辑和绘制的类。这些类可用于创建自定义工具栏的项、类型特定的值编辑器(可以编辑并可以用图形方式表示其支持的类型的值)和类型转换器(在一定的类型之间转换值)。
System.Drawing.Imaging命名空间提供高级GDI+图像处理功能。Metafile
类提供记录和保存图元文件的方法。Encoder
和Decoder类允许用户扩展GDI+以支持任何图像格式。PropertyItem
类提供在图像文件中存储和检索元数据的方法。
System.Drawing.Text命名空间提供高级GDI+排版功能。该命名空间中的类允许用户创建和使用多种字体。
System.Drawing.Printing命名空间提供与打印相关的服务。通常,您会创建PrintDocument
类的新实例,设置对打印内容进行描述的属性,然后调用Print
方法来实际打印文档。4版权所有4.1.2基本数据结构在绘图操作中,常常需要使用Point(点)、Size(大小)和Rectangle(矩形)等简单的数据结构。5版权所有6版权所有
2.基本运算符操作
Point、Size和Reactangle类结构重载了常用的运算符操作,如Point和Size结构的+、-、==、!=操作,Rectangle结构的==、!=操作等。这里只介绍Point和Size结构的+和-操作。(1)“+”操作若向Point对象加上一个Size对象,则返回Point对象。例如:Drawing.Pointpt=newDrawing.Point(25,-18)+newSystem.Drawing.Size(10,5);则结果为Point(35,-13)。若向Size对象加上一个Size对象,则是它们的宽度和高度分别相加。Sizesz=newSize(50,50)+newSize(10,10);(2)“-”操作若向Point对象减去一个Size对象,则返回Point对象。例如:Drawing.Pointpt=Drawing.Point(25,-19)+Drawing(15,5);若向Size对象减一个Size对象,则是它们的宽度和高度分别相减。Sizesz=newSize(50,50)-newSize(10,10);7版权所有
3.Rectangle结构的常用操作(1)扩大和缩小使用Inflate方法。voidInflate(Sizesize)voidInflate(int
widht,intheight);(2)相交和合并成员方法Iniersect和Union分别用来将两个矩形进行相交和合并。voidIntersect(Rectanglerect)staticRectangleIntersect(Rectanglea,Rectangleb);staticRectangleUnion(Rectanglea,Rectangleb);8版权所有(3)移动
Offset方法用来调整矩形的位置。voidOffset(Pointpos);voidOffset(int
x,inty);(4)测试和判断IntersectsWith方法用来判断是否和指定的矩形相交。若有相交,则返回true,否则返回false。bool
IntersectWidth(Rectangle
rect);9版权所有4.1.3处理图形图像的步骤处理图形包括两个步骤:创建Graphics对象;使用Graphics对象绘制线条和形状、呈现文本或显示与操作图像。10版权所有4.2GDI+绘图基础4.2.1坐标系统
1.全局坐标、页面坐标和设备坐标
2.Grahpics与坐标系统有关的成员
3.全局变换全局坐标到页面坐标的坐标变换叫做全局变换,保存在Graphics类的Transform属性中。主要包含两种变换:平移(TranslateTransform)、旋转(RotateTransform)、比例(ScaleTransform)。11版权所有4.页面变换页面坐标的原点总是在虚拟绘图平面的左上角。由于页面坐标标度量单位是像素,所以设备坐标与页面坐标是相同的。但如果将页面坐标改成其他的单位(如英寸),两者就不同了。这时发生页面坐标到设备坐标的变换称为页面变换。Graphics类的PageUnit和PageScale两个属性提供页面变换操作。12版权所有【案例4-1】建立坐标系并画圆。设计一个坐标系,坐标原点在窗体的中心,单位为英才,X轴向右为正,Y轴向上为正,画出坐标轴,在此坐标系绘制一个圆,圆心在坐标圆点,半径为1英寸。13版权所有4.2.2
画笔画笔是绘制各种直线和曲线的一种图形工具,它主要有线型、颜色和线宽属性。默认的线宽为1个像素,线型为实线。14版权所有1.建立Pen对象(1)直接使用Pen类构造函数。常用下面的三种重载形式:publicPen(Colorc):创建某一种颜色的Pen对象。publicPen(Colorc,floatw):创建某一种颜色和相应宽度的Pen对象。publicPen(Brushb):创建某一刷子样式的Pen对象。publicPen(Brushb,floatw):创建某一刷子样式并具有相应宽度的Pen对象。15版权所有(2)从SystemPens和Pens类获取Pen对象的引用。System.Drawing.SystemPens类用于创建与用户界面单位和系统颜色相匹配的笔。该类的每一个共享属性都返回一个Pen对象的引用。例如:Penpe=SystemPens.HighlightText;//画笔使用选定项的文本颜色。16版权所有2.Pen的常用属性Brush属性。获取或设置用于确定此Pen对象的属性的Brush对象。Color属性。获取或设置此Pen对象的颜色。Width属性。获取或设置此Pen对象的宽度。DashStyle属性。获取或设置用于通过此Pen对象绘制的虚线的样式。DashCap属性。获取或设置用在短划线终点的帽样式,Drawing2D.DashCap枚举值。17版权所有EndCap属性。获取或设置用在通过此Pen对象绘制的直线终点的帽样式。取Drawing2D.LineCap枚举值,如表4-4所示。StartCap属性。获取或设置用在通过此Pen对象绘制的直线起点的帽样式。取Drawing2D.LineCap枚举值,如表4-4所示。LineJoin属性。获取或设置通过此Pen对象绘制的两条连续直线终点之间的联接样式。指定如何在图形(子路径)中联接连续的直线或曲线段,该图形(子路径)包含在GraphicsPath对象中。Drawing2D.LineJoin枚举值。18版权所有2.画刷Brush类决定如何填充图形形状(如矩形、椭圆形、扇形、多边形和封闭路径)内部。这是一个抽象基类,不能进行实例化。若要创建一个画刷对象,可使用从Brush派生出的类。这些派生类主要有:SolidBrush(单色画刷)、TextureBrush(纹理画刷)、HatchBrush(阴影画刷)、LinearGradientBrush(线性渐变画刷)、PathGradientBrush(路径渐变画刷)。前两个定义在System.Drawing命名空间中,后三个定义在System.Drawing.Drawing2D命名空间中。19版权所有4.3基本的绘图方法4.3.1绘制线条或形状1.画直线使用Graphics的DrawLine方法可以绘制直线。publicvoidDrawLine(Pen
pen,intx1,inty1,intx2,inty2):绘制一条连接由坐标对指定的两个点的线条。publicvoidDrawLine(Penpen,floatx1,floaty1,floatx2,floaty2):绘制一条连接由坐标对指定的两个点的线条。publicvoidDrawLine(Penpen,Pointp1,Pointp2):绘制一条连接两个Point结构的线。20版权所有2.画椭圆使用Graphics的DrawEllipse方法可以绘制椭圆。publicvoidDrawEllipse(Penpen,Rectanglerect):绘制边界Rectangle结构指定的椭圆。publicvoidDrawEllipse(Penpen,intx,inty,intw,inth):绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。publicvoidDrawEllipse(Pen,float,float,float,float):绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。21版权所有3.绘制圆弧使用Graphics的DrawArc方法可以绘制圆弧。publicvoidDrawArc(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle):绘制一段弧线,它表示Rectangle结构指定的椭圆的一部分。publicvoidDrawArc(Penpen,intx,inty,intw,inth,int
startAngle,int
sweepAngle):绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。publicvoidDrawArc(Penpen,floatx,floaty,floatw,floath,floatstartAngle,floatsweepAngle):绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。
22版权所有4.画扇形图使用Graphics的DrawPie方法可以绘制扇形图,所谓扇形图其实质就是一段圆弧的两个端点与圆心相连。DrawPie方法的格式与DrawArc方法基本一致。23版权所有5.画矩形使用Graphics的DrawRectangle方法可以绘制矩形。publicvoidDrawRectangle(Penpen,Rectangler):绘制由Rectangle结构指定的矩形。publicvoidDrawRectangle(Penpen,intx,inty,intw,inth):绘制由坐标对、宽度和高度指定的矩形。publicvoidDrawRectangle(Penpen,floatx,floaty,floatw,floath):绘制由坐标对、宽度和高度指定的矩形。24版权所有6.画多边形使用Graphics的DrawPolygon方法可以绘制多边形。publicvoidDrawPolygon(Penpen,Point[]p):绘制由一组Point结构定义的多边形publicvoidDrawPolygon(Penpen,PointF[]p):绘制由一组PointF结构定义的多边形。25版权所有7.画贝塞尔样条曲线使用Graphics的DrawBezier方法可以绘制贝塞尔样条曲线。publicvoidDrawBezier(Penpen,Pointp1,Pointp2,Pointp3,Pointp4):绘制由4个Point结构定义的贝塞尔样条。publicvoidDrawBezier(Penpen,PointFp1,PointFp2,PointFp3,PointFp4):绘制由4个PointF结构定义的贝塞尔样条。publicvoidDrawBezier(Penpen,floatx1,floaty1,floatx2,floaty2,floatx3,floaty3,floatx4,floaty4):绘制由四个表示点的有序坐标对定义的贝塞尔样条。26版权所有8.绘制闭合曲线使用Graphics的DrawClosedCurve方法可以闭合曲线。publicvoidDrawClosedCurve(Penpen,Point[]p):绘制由Point结构的数组定义的闭合基数样条。publicvoidDrawClosedCurve(Penpen,PointF[]p):绘制由PointF结构的数组定义的闭合基数样条。publicvoidDrawClosedCurve(Penpen,Point[]p,floatt,FillModefm):使用指定的张力绘制由Point结构数组定义的闭合基数样条。publicvoidDrawClosedCurve(Penpen,PointF[]p,floatt,FillMode):使用指定的张力绘制由PointF结构数组定义的闭合基数样条。27版权所有9.绘制非闭合曲线使用Graphics的DrawCurve方法可以非闭合曲线。参数格式同上述绘制闭合曲线的第一个方法。10.绘制路径使用Graphics的DrawPath方法可以绘制路径。路径是直线、矩形、多边形或曲线等组成。publicvoidDrawPath(Penpen,GraphicsPathpath):绘制GraphicsPath对象。28版权所有11.绘制填充图形和上述方法对应的,还有一组Fill开头的方法,可以用来绘制填充图形。例如:FillEcllips方法可以绘制填充椭圆。29版权所有【案例4-2】绘制一个小汽车。利用基本的绘图方法,在界面上绘制一个小车。30版权所有【案例4-3】一个简单的绘图程序。本案例是一个简单的绘图程序,能够利用鼠标任意画,能够画直线、椭圆及矩形,可以设置色彩。31版权所有4.3.2绘制文字可以使用任何图形对象作为绘制文本的表面。绘制文本需要一个Brush对象(它指示将使用什么图案填充文本)和一个Font对象(它描述要填充的图案)。字体可以是系统上安装的任何已命名的字体,而画笔可以为任意类型的画笔。因此,有可能使用纯色、图案或者甚至图像来绘制文本。32版权所有4.4图像的显示与处理4.4.1图像的显示1.Bitmap类Bitmap类封装GDI+位图,此位图由图形图像及其属性的像素数据组成。Bitmap对象是用于处理由像素数据定义的图像的对象。可以从各种各样的图形文件格式(BMP、GIF、JPEG、EXIF、PNG、TIFF和ICON)中构造Bitmap对象。33版权所有(1)主要的属性Flags:获取此Image对象的属性标记。Height:获取此Image对象的高度。Palette:获取或设置用于此Image对象的调色板。RawFormat:获取此Image对象的格式。Size:获取此图像的以像素为单位的宽度和高度。Width:获取此Image对象的宽度。34版权所有(2)主要的方法Clone():创建此Bitmap(用指定的PixelFormat
定义)部分的副本。FromHicon():从图标的Windows句柄创建Bitmap。FromResource():从指定的Windows资源创建Bitmap对象。GetBounds():以指定的单位获取此Image对象的边框。GetPixel():获取此Bitmap中指定像素的颜色。GetThumbnailImage():返回此Image对象的缩略图。Save():将此图像以指定的格式保存到指定的流中。SetPixel():设置Bitmap对象中指定像素的颜色。35版权所有2.图像的显示若使用Image来显示图像。可以用Image的静态方法FromFile()来加载图像文件。如:Imageim=Image.FromFile(“c:\\ba.jpg”);g.DrawImage(im,0,0);36版权所有4.4.2保存、拷贝和粘贴保存图像可以使用Bitmap的Save方法。例如:pictureBox1.image.Save("c:\\myimage.bmp");在保存图像时,还可以指定图像文件的格式。例如:pictureBox1.image.Save("c:\\myimage.bmp");pictureBox1.image.Save("c:\\myimage.bmp");pictureBox1.image.Save("c:\\myimage.bmp",ImageFormat.Jpeg);37版权所有Bitmap类提供了Clone方法,可用于制作现有Bitmap对象的副本。Clone方法带有源矩形参数,可用于指定要复制的原始位图的部分。下面的示例通过拷贝现有Bitmap对象的上半部分来创建Bitmap对象。然后绘制两幅图像。38版权所有4.4.3图像处理1.彩色图像变成灰度图像将彩色图像像素值分解为三基色R、G、B,求其和的平均值,然后使用SetPixel方法以该平均值参数生成图像。对一个像素的处理过程如下:(1)取颜色值Colorc=im.GetPixel(i,j);//im为Bitmap类型对象39版权所有(2)分解颜色值intr=c.R;intg=c.R;intb=c.R;(3)取平均,生成新的颜色intcc=(r+g+b)/3;Colorc1=Coloe.FromArgb(cc,cc,cc);(4)设定图像颜色im1.SetPixel(i,j,c1);//im1是im的复制40版权所有2.对图像进行浮雕处理将彩色图像像素值分解为三基色R、G、B,分别与相邻像素的三基色R、G、B相减后加上一个常量(128)。然后作为新的像素的RGB颜色值(为了防止颜色溢出,需处理小于0和大于255的颜色值)。对一个像素的处理过程如下:(1)取两个像素的颜色值Colorc1=im.GetPixel(i,j);//im为Bitmap类型对象Colorc2=im.GetPixel(i+1,j+1);//取相邻像素的颜色值41版权所有(2)对两个像素的颜色值进行分解,相减后加上128,
intr=Math.Abs(c1.R-c2.R)+128;
intg=Math.Abs(c1.G-c2.G)+128;
intb=Math.Abs(c1.B-c2.B)+128;(3)处理后生成新的颜色
if(r<0)r=0; if(r>255)r=255; if(g<0)g=0; if(g>255)g=255; if(b<0)b=0; if(b>255)b=255;Colorcc=Coloe.FromArgb(r,g,b);(4)设定图像颜色im1.SetPixel(i,j,cc);//im1是im的复制42版权所有3.图像的透明度处理取出颜色值后,再给定一个透明度的值,利用Color.FromRgb(inta,Colorc)方法即可生成目标图像的颜色值。从而实现不同的透明效果。参数a的取值在0~255之间。c=im.GetPixel(i,j);Colorcc=Color.FromArgb(a,c);im.SetPixel(i,j,cc);43版权所有4.图像的旋转与拉伸图像的旋转可以使用Image类的RotateFlip方法实现,它只有一个RotateFlipType枚举参数,用来指定图像的旋转和翻转的类型。44版权所有5.图像格式转换GDI+的Image类中有一个Save方法,它可以用来将图像按指定的格式保存文件中。格式如下:voidSave(stringfilename,ImageFormatformat);其中,filename用来指定要保存的文件名,format用来指定要保存的格式,可以直接引用ImageFormat类的静态成员属性来指定。45版权所有【案例4-4】图像处理程序。创建一个Windows应用程序,在窗体上添加两个图片框和三个按钮。第一个图片显示原图像,第二个图片框显示处理后的图像。46版权所有4.5声音与视频的播放4.5.1MediaPlayer控件及其使用在C#中,可以引用Windows自带的WindowsMediaPlayer组件播放多种格式的视频和音频文件,包括MPEG视频、AVI、WAV和MIDI等格式的文件。47版权所有1.添加
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024成都市拆迁房屋合同
- 2024工矿产品购买合同样本
- 购物广场项目组织结构方案
- 购物广场项目财务分析
- 考试预检分诊
- 金属冶炼(有色)企业主要负责人试卷【样卷2】
- 2024年心脏起搏器(含体内)合作协议书
- 2024年治疗精神障碍药项目合作计划书
- 2024年无机非金属材料合作协议书
- 平面设计师工作计划(17篇)
- 2024时事政治考试题库(100题)
- 浅谈钢-混凝土叠合板组合梁
- 23001料仓制作安装施工工艺标准修改稿
- 学习的最高境界叫巅峰学习状态
- 3211 城市公交企业安全风险分级管控指南
- 行政管理 外文翻译 外文文献 英文文献 全球媒体和政治:跨国沟通制度和公民文化
- 北京市房屋建筑和市政基础设施工程危险性较大的分部分项工程安全管理实施细则
- 议论文段落写作——茹清平
- (完整版)驾驶员违章违规处罚办法
- “六项机制”工作实施方案
- 精神病问诊过程示例
评论
0/150
提交评论