C#应用程序设计教程 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 耿肇英 耿燚 第5章图形图像编程

上传人:E**** 文档编号:89370638 上传时间:2019-05-24 格式:PPT 页数:74 大小:339.50KB
返回 下载 相关 举报
C#应用程序设计教程 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 耿燚 第5章图形图像编程_第1页
第1页 / 共74页
C#应用程序设计教程 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 耿燚 第5章图形图像编程_第2页
第2页 / 共74页
C#应用程序设计教程 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 耿燚 第5章图形图像编程_第3页
第3页 / 共74页
C#应用程序设计教程 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 耿燚 第5章图形图像编程_第4页
第4页 / 共74页
C#应用程序设计教程 普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 耿燚 第5章图形图像编程_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《C#应用程序设计教程 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 耿肇英 耿燚 第5章图形图像编程》由会员分享,可在线阅读,更多相关《C#应用程序设计教程 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 耿肇英 耿燚 第5章图形图像编程(74页珍藏版)》请在金锄头文库上搜索。

1、第五章 图形图像编程,本章的目的是学习使用GDI+的图形图像编程方法,希望在学习本章以后,能编制像Windows画图那样的程序。本章的重点是学习创建画笔、画刷等绘图工具,学习使用Graphics类的绘图函数绘制各种图形,学习利用Bitmap类处理图形和图像,最后简单介绍多媒体和3D图形程序设计的基础知识。,5.1 GDI+(图形设备环境接口),GDI+是2D(2维)图形库,它允许程序员用库中的函数编写与显视器、打印机和文件等图形设备进行交互的Windows和Web应用程序,可以在这些设备上输出字符和2D图形。Windows和Web应用程序根据是在CRT显示还是在打印机打印,首先生成显示设备环境

2、或打印设备环境,然后调用不同设备环境中的同名函数实现在显视器显示或在打印机上打印。而设备环境根据选择的不同设备,调用各个设备制造厂商提供的设备驱动程序,在显视器上显示或在打印机上打印。这些工作都是由GDI+完成的。这样做的最大好处是应用程序和设备无关,应用程序不必为不同的设备编制不同的程序。无论是不同的显卡,还是不同的打印机,只要安装该设备的驱动程序,应用程序就可以使用该设备了,微软的Word程序可以使用不同的打印机就是使用了这个原理。设备环境所扮演的角色如图所示。,GDI+是对Windows操作系统GDI函数库(GDI32.DLL)的扩充,并用C+类进行了封装,GDI+提供了比GDI更强大的

3、功能。WindowsXP及以后版本支持GDI+,以前版本Windows操作系统要使用GDI+,必须复制Gdiplus.dll到系统目录。GDI+支持受控代码和非受控代码。,5.2 Graphics类,Graphics类提供一些方法绘制各种图形。Graphics类是密封类,不能有派生类。,5.2.1 使用Graphics类绘图的基本步骤,GDI+类提供了一些绘图工具,例如提供笔用来定义图形外轮廓线的颜色及粗细,提供刷子定义添充封闭图形内部的颜色和格式,提供不同输出字体。Graphics类中提供绘图函数使用GDI+类中提供的绘图工具来输出字符或绘制图形。GDI+默认绘图坐标以窗体用户区左上角为原点

4、,x轴向右为正方向,y轴向下为正方向,单位为像素。GDI+定义了三种坐标系统,并提供了三种坐标转换的方法Graphics.TransformPoints()。在不同的控件或设备上绘制图形方法有很大不同,为了在不同的控件或设备上用完全相同的代码完成相同的图形,绘图前应首先建立或得到相应控件或设备关联的Graphics类对象。下面的例子,在窗体中增加了一个按钮,单击按钮将在窗体中画一个边界为红色,内部填充为蓝色的圆。该程序段说明了使用Graphics类绘图的基本步骤。按钮的单击事件处理函数如下:,绘制矩形定义的园或椭圆,矩形左上角坐标为(10,10),宽和高各为100个像素单位。 private

5、void button1_Click(object sender,EventArgs e) /得到窗体使用的Graphics类对象方法1 Graphics g=this.CreateGraphics(); /创建红色的笔对象 Pen pen1=new Pen(Color.Red); /创建蓝色的刷子对象 SolidBrush brush1=new SolidBrush(Color.Blue); /用红色笔在窗体中画矩形内切圆的边界 g.DrawEllipse(pen1,10,10,100,100); /用蓝色刷子填充矩形内切圆的内部 g.FillEllipse(brush1,10,10,100

6、,100); ,5.2.2 窗体的Paint事件,运行上例,单击按钮,出现边界为红色,内部填充为蓝色的圆。最小化后再最大化,图形消失。这是因为当发生窗体最小化后再最大化、菜单被打开再关闭或打开对话框再关闭等情况,用户区内容可能被破坏。操作系统不保存被破坏的用户区内容,而是由应用程序自己恢复被破坏的用户区内容。当应用程序窗口用户区内容被破坏后需恢复时,Windows操作系统向应用程序发送Paint事件,应用程序应把在窗口用户区输出数据的语句放在Paint事件处理函数中,应用程序响应Paint事件,能在事件处理函数中调用这些在窗口用户区输出数据的语句恢复被破坏的内容。Form类窗体不能自动响应Pa

7、int事件,程序员必须生成Paint事件处理函数。修改上例,在Form1类中增加Paint事件处理函数如下:,private void Form1_Paint(object sender,PaintEventArgs e) /得到窗体的使用的Graphics类对象方法2,方法3见5.9.4节 Graphics g=e.Graphics; Pen pen1=new Pen(Color.Red); SolidBrush brush1=new SolidBrush(Color.Blue); g.DrawEllipse(pen1,10,10,100,100); g.FillEllipse(brush1

8、,10,10,100,100); 运行后,出现边界为红色,内部填充蓝色的圆。最小化后,再最大化,图形不消失。,5.3 GDI+中常用的结构,本节介绍GDI+中常用的结构,包括:Point、PointF、Size、SizeF、Rectangle、RectangleF、Color等。它们是在命名空间System.Drawing中定义的。 点结构Point和PointF定义点的位置。点结构有两个成员:X,Y,表示点的x轴和y轴的坐标。其常用构造函数如下: Point p1=new Point(int X,int Y);/X,Y为整数 PointF p2=new PointF(float X,floa

9、 Y);/X,Y为浮点数,结构Size和SizeF用来描述对象宽和高,有成员Width和Height。常用构造函数如下: /坐标系统可以转换,坐标单位可以不是点距 Size(int width,int height); /float类型是为了支持坐标不是点距的单位 /(例如单位为mm) SizeF(float width,float height);,矩形结构Rectangle和RectangleF用来描述一个矩形,其常用属性和方法如下: 属性X、Y和只读属性Left、Top: 只读属性Right和Bottom: 属性Width、Height和只读属性Size: 构造函数Rectangle(P

10、oint location,Size size): 构造函数Rectangle(int X,int Y,int width,int height):,Color结构用来描述颜色。任何一种颜色可以用透明度(alpha),蓝色(bb),绿色(gg),红色(rr)合成,16进制数格式为0xalrrbbgg,其中al,bb,gg,rr为2位16进制数(0-255),用这个无符号32位数代表颜色。Color结构常用方法如下: public static Color FromArgb (int alpha,int rr,int gg,int bb): public static Color FromArg

11、b (int rr,int gg,int bb): public static Color FromArgb (int alpha,Color color): 【例5.1】本例创建3个半透明的红、绿、蓝刷子,填充3个矩形,请注意例子中透明度及颜色使用的方法。,private void Form1_Paint (object sender,PaintEventArgs e) Graphics g=e.Graphics; SolidBrush RedBrush=new SolidBrush (Color.FromArgb(128,255,0,0); /半透明 SolidBrush GreenBru

12、sh=new SolidBrush(Color.FromArgb(128,0,255,0); SolidBrush BlueBrush=new SolidBrush(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); ,效果如图,可以将透明度alpha值设为255,再运行一次,看看有何不同。C#中还预定义了一些颜色常数,例如黑色为Color.Black,红色

13、为Color.Red等等,请用VS2005帮助系统查看。,5.4 画笔Pen类,Pen类对象指定绘制图形的外轮廓线宽度和颜色。Pen类有4个构造函数,分别是: public Pen(Color color); public Pen(Color color,float width); public Pen(Brush brush); public Pen(Brush,float width); 【例5.2】Pen类常用的属性:Color为笔的颜色,Width为笔的宽度,DashStyle为笔的样式,EndCap和StartCap为线段终点和起点的外观。下例显示各种笔的属性DashStyle、En

14、dCap和StartCap不同选项的样式。主窗体Paint事件处理函数如下,运行效果如图。,private void Form1_Paint(object sender,PaintEventArgs e) Graphics g=e.Graphics; Pen pen1=new Pen(Color.Red,6); /默认为实线笔 /从点(10,10)到点(100,100)的实线,图中左边第1条线 g.DrawLine(pen1,10,10,100,10); pen1.DashStyle= System.Drawing.Drawing2D.DashStyle.Dash; /虚线笔 g.DrawLi

15、ne(pen1,10,20,100,20);/画虚线图中左边第2条线 /点短线风格的线 pen1.DashStyle= System.Drawing.Drawing2D.DashStyle.DashDot; g.DrawLine(pen1,10,30,100,30); /图中左边第3条线 /下条语句设置双点,短线风格的线风格 pen1.DashStyle= System.Drawing.Drawing2D.DashStyle.DashDotDot; g.DrawLine(pen1,10,40,100,40); /图中左边第4条线,pen1.DashStyle= /由点组成的线 System.D

16、rawing.Drawing2D.DashStyle.Dot; g.DrawLine(pen1,10,50,100,50);/图中左边第5条线 pen1.DashStyle= /恢复实线笔 System.Drawing.Drawing2D.DashStyle.Solid; pen1.EndCap= /后箭头 System.Drawing.Drawing2D.LineCap.ArrowAnchor; g.DrawLine(pen1,150,10,250,10);/图中右边第1条线 pen1.StartCap= /前箭头 System.Drawing.Drawing2D.LineCap.ArrowAnchor; g.DrawLine(pen1,150,22,250,22); /图中右边第2条线 pen1.EndCap= System.Drawing.Drawing2D.LineCap.RoundAnchor; g.DrawLine(pen1,150,34,250,34); /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号