第10章 GDI+图形图像程序设计

上传人:我*** 文档编号:137616333 上传时间:2020-07-10 格式:PPT 页数:35 大小:1.45MB
返回 下载 相关 举报
第10章 GDI+图形图像程序设计_第1页
第1页 / 共35页
第10章 GDI+图形图像程序设计_第2页
第2页 / 共35页
第10章 GDI+图形图像程序设计_第3页
第3页 / 共35页
第10章 GDI+图形图像程序设计_第4页
第4页 / 共35页
第10章 GDI+图形图像程序设计_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《第10章 GDI+图形图像程序设计》由会员分享,可在线阅读,更多相关《第10章 GDI+图形图像程序设计(35页珍藏版)》请在金锄头文库上搜索。

1、,第10章 GDI+图形图像程序设计,学习要点,1.掌握C#的GDI+常用绘图功能的实现方法 2.掌握C#的GDI+文本的字体设置及其呈现的实现方法 3.掌握C#的GDI+图像处理的基础知识及动画设计方法 4.了解C#的GDI+图像的变形功能的实现方法,10.1 GDI+概述,GDI(Graphics Device Interface,即图形设备接口)是Windows API(Application Programming Interface)的一个重要组成部分。而GDI+(Graphics Device Interface Plus,即增强型图形设备接口)则是GDI的升级版本,是微软在Win

2、dows 2000以后的操作系统中提供的新的图形设备接口,它在GDI的基础上作了大量的优化、改进。一方面,GDI+提供一些新的功能(如,渐变画刷Gradient Brushes以及混合Alpha Blending等),使得GDI的功能得到进一步的扩展;另一方面,GDI+修订了编程模式,使得图形硬件和应用程序相互隔离,也使开发人员编写设备无关的应用程序变得更加容易。GDI+的体系结构如下图所示。,GDI+的体系结构,10.1.1 .NET图形图像处理命名空间,.NET的所有图形图像处理功能都包含在以下命名空间中: System.Drawing命名空间提供了对GDI+基本图形功能的访问,主要有Gr

3、aphics类、Bitmap类以及从Brush类继承来的Font类、Icon类、Image类、Pen类和Color类等。 System.Drawing.Drawing2D命名空间提供高级的二维和矢量图形功能。此命名空间包含渐变画笔、Matrix类(用于定义几何变换)和GraphicsPath类。 System.Drawing.Imaging命名空间提供高级GDI+图像处理功能。 System.Drawing.Text命名空间提供高级GDI+字体和文本排版功能。,10.1.2 GDI+绘图的基本步骤,10.1.3 Graphics类,1.在窗体或控件的Paint事件中直接引用Graphics对象

4、 每个窗体或控件都有一个Paint事件,该事件参数中包含了当前窗体或控件的Graphics对象,在为窗体或控件编写绘图代码时,一般使用此方法来获取图形对象的引用。例如: private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; /其他图形图像处理代码 2.调用当前窗体或控件的CreateGraphics方法 调用当前窗体或控件的CreateGraphics方法以获取对Graphics对象的引用,该对象表示当前窗体或控件的绘图图面。如果想在已存在的窗体或控件上绘图,可以使用这种方法。例如:

5、 Graphics g = this.CreateGraphics(); /其他图形图像处理代码 ,10.1.3 Graphics类,3.调用Graphics类的FromImage静态方法 调用Graphics类的FromImage静态方法,从继承自图像的任何对象创建Graphics对象,此方法通常用于更改已存在的图像。例如: Bitmap bitmap = new Bitmap(C:CProgameb1.bmp); Graphics g = Graphics.FromImage(bitmap); 或者: Image img = Image.FromFile(g1.gif); Graphics

6、 g = Graphics.FromImage(img); 提示: 由于图像对象非常占用系统资源,所以当不再使用这些对象时,应该使用Dispose方法及时将其占用的资源释放掉,以免影响系统的性能。,10.1.4 颜色,颜色是进行图形操作的基本要素。任何一种颜色的表现效果都可以由3个色彩分量和1个透明度参数来确定,每个分量占1B,即: R:红色,取值范围为0255,255为饱和红色。 G:绿色,取值范围为0255,255为饱和绿色。 B:蓝色,取值范围为0255,255为饱和蓝色。 A:即Alpha值,表示一种颜色的透明度,取值范围为0255,0为完全透明,255为完全不透明。在GDI+中,颜色

7、封装在Color结构中,可用以下几种方法创建颜色对象。,10.1.5 坐标系统,“画布”有了,“颜料”也准备好了,这时似乎可以“执笔”了。其实不然,因为还需先运筹一下 “在哪里”下笔和“在什么范围”下笔的问题。这对GDI+来说,就是坐标系统的确定问题。 GDI+使用Point、Size和Rectangle结构来进行绘图时的坐标定位和尺寸确定。 Point结构 GDI+的Point表示一个二维平面上的点,可以使用一些公共属性获取或设置Point的X和Y坐标。声明和构造Point的示例代码如下: Point p = new Point(85,100); Size结构 GDI+使用Size表示一个尺

8、寸(单位:像素),Size结构包含宽度和高度两个量。可以使用一些公共属性获取或设置Point的X和Y坐标。声明和构造Point的示例代码如下: Size s = new Size(50,80); Rectangle结构 Rectangle可以采用两种构造函数,一种是指定矩形左上角的X和Y坐标以及矩形的宽和高,示例代码如下: Rectangle rct = new Rectangle(10,20,150,300);,10.1.6 画笔与画刷,笔(Pen) 笔是Pen类的实例,用于绘制线条或空心图形。通过笔的With属性可以设置其宽度;Color属性可以设置其颜色;StartCap和EndCap属

9、性设置其起点或终点的样式;DashStyle属性则可以设置其线样式,如实线、虚线或点划线等。实例化笔对象的示例代码如下: /1个像素宽的红色笔 Pen pen1 = new Pen(Color.Red); /5个像素宽的黑色笔 Pen pen2 = new Pen(Color.Black,5); 另外,也可以从画刷(详见画刷介绍)对象实例化笔,示例代码如下: /1个像素宽的红色画刷 SolidBrush brush1 = new SolidBrush (Color.Red); /1个像素宽的红色笔 Pen pen1 = new Pen(brush1); /5个像素宽的红色笔 Pen pen2

10、= new Pen(brush1,5); 画刷(Brush) 画刷是从Brush类派生的任何类的实例,可与Graphics对象一起使用来创建实心图形或呈现文本对象。还可以使用画刷填充各种图形,如矩形、椭圆或多边形等。,10.2 利用画笔或画刷绘制图形,10.2.1 绘制直线 1.先定义一对坐标点,再将其作为起始点和终点进行划线。其构造函数如下: public void DrawLine(Pen pen,Point startPoint,Point endPoint); 示例代码如下: private void Form1_Paint(object sender, PaintEventArgs

11、e) Graphics g = e.Graphics; Pen pen = new Pen(Color.Black,5); Point startPoint = new Point(10,30); Point endPoint = new Point(200,90); e.Graphics.DrawLine(pen,startPoint,endPoint); ,10.2 利用画笔或画刷绘制图形,2.直接定义一对起点和终点坐标并进行划线。其构造函数如下: public void DrawLine(Pen pen, nt x1, int x2, int y1, int y2); 则以上示例代码可改

12、写如下: private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; Pen pen = new Pen(Color.Black,5); e.Graphics.DrawLine(pen,10,30,200,90); ,10.2 利用画笔或画刷绘制图形,3.先定义多对坐标点,再将他们作为首尾相连的起点和终点进行划线。其构造函数如下: public void DrawLine(Pen pen, Point points); 示例代码如下: private void Form1_Paint(ob

13、ject sender, PaintEventArgs e) Graphics g = e.Graphics; Pen pen = new Pen(Color.Red,2); Point points = new Point(15,20), new Point(30,120), new Point(100,180), new Point(260,50) ; e.Graphics.DrawLines(pen, points); ,10.2.2 绘制多边形,由于多边形既有轮廓且封闭,所以,多边形可划分为空心多边形和实心(有填充)多边形两种。C#.NET中与之对应的绘图方法分别:DrawPolygo

14、n方法和FillPolygon方法,不过要注意,DrawPolygon方法需使用笔,FillPolygon方法需使用画刷,如此才可分别绘制空心或实心的多边形。 示例代码如下: private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; Pen pen = new Pen(Color.Blue,2); Point points1 = new Point(90,40), new Point(40,150), new Point(140,150) ;,10.2.2 绘制多边形,e.Graphic

15、s.DrawPolygon(pen, points1); Brush brush = new SolidBrush(Color.Red); Point points2 = new Point(230,40), new Point(180,150), new Point(280,150) ; e.Graphics.FillPolygon(brush, points2); ,10.2.3 绘制曲线,C#.NET中可以分别使用DrawCurve方法和DrawClosedCurve方法绘制自定义的开口曲线和封闭曲线;还可以使用DrawBezier方法或DrawBeziers方法绘制一段或多段贝塞尔曲线

16、。自定义曲线绘制可用如下两种构造函数。 1.使用默认弯曲强度0.5进行绘图。其构造函数如下: public void DrawCurve(Pen pen, Point points); 2.指定弯曲强度进行绘图。其构造函数如下: public void DrawCurve(Pen pen, Point points,float tension); 其中tension指定定弯曲强度,取值范围为0.0f1.0f,超出范围将产生异常,取值为0时,绘制直线。 (示例代码见教材),10.2.4 绘制矩形,由于矩形也是既有轮廓且封闭,所以,矩形也可划分为空心矩形和实心(有填充)矩形两种。C#.NET中与之对应的绘图方法分别:DrawRectangle方法(或DrawRectangles)和FillRectangle方法(或FillRectangles),不过要注意,轮廓方法需使用笔,填充方法需使用画刷,如此才可分别绘制空心或实心的矩形。 绘制空心矩形可用如下三种构造函数。 1.利用Rectan

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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