第12-13讲gdi+绘图剖析.

上传人:今*** 文档编号:107505547 上传时间:2019-10-19 格式:PPT 页数:40 大小:638KB
返回 下载 相关 举报
第12-13讲gdi+绘图剖析._第1页
第1页 / 共40页
第12-13讲gdi+绘图剖析._第2页
第2页 / 共40页
第12-13讲gdi+绘图剖析._第3页
第3页 / 共40页
第12-13讲gdi+绘图剖析._第4页
第4页 / 共40页
第12-13讲gdi+绘图剖析._第5页
第5页 / 共40页
点击查看更多>>
资源描述

《第12-13讲gdi+绘图剖析.》由会员分享,可在线阅读,更多相关《第12-13讲gdi+绘图剖析.(40页珍藏版)》请在金锄头文库上搜索。

1、计算机技术与工程学院,Windows程序设计,第12讲 GDI+图文绘制技术,学习要点,掌握GDI+图文绘制的技术 了解GDI+图像处理的C#程序设计基础,10.1 GDI+简介,GDI(Graphics Device Interface,即图形设备接口)是 Windows API的一个重要组成部分。而GDI+则是GDI的升级版本,它在GDI的基础上做了大量的优化、改进。一方面,GDI+提供了一些新的功能(如渐变画刷Gradient Brushes以及混合Alpha Blending等);另一方面,GDI+修订了编程模式,将图形硬件和应用程序相互隔离,使得开发人员可以更加容易地编写与设备无关的

2、应用程序。,10.1 GDI+简介,GDI+主要提供以下功能: 二维矢量图形:GDI+提供存储图形基元自身信息的类(或结构)、存储图形基元绘制方式信息的类以及实际进行绘制的类。 图像处理:多数图像都难以或不可能使用矢量图形表示,所以,GDI+提供了Bitmap和Image等类,用于显示、操作和保存BMP、JPEG、GIF或PNG等格式的图像。 文本显示:在GDI+中,文本信息也是“绘制”的,并且可以使用各种字体、字号以及样式。,10.2 GDI+绘制图文的基本步骤,10.3 GDI+绘制图文的技术基础,10.3.1 .NET图形图像处理命名空间 System.Drawing命名空间,提供对GD

3、I+基本图形功能的访问,主要有Graphics类、Bitmap类以及从Brush类继承来的Font类、Image类、Pen类和Color类等。 System.Drawing.Drawing2D命名空间,提供高级的二维图形和矢量图形功能。此命名空间包含渐变画笔、Matrix类(用于定义几何变换)和GraphicsPath类。 System.Drawing.Imaging命名空间,提供高级GDI+图像处理功能。 System.Drawing.Text命名空间,提供高级GDI+字体和文本排版功能。,10.3 GDI+绘制图文的技术基础,10.3.2 Graphics类 对于GDI+绘图,准备画纸就是

4、创建Graphics对象,该对象表示当前的绘图界面。Graphics类封装了一个GDI+绘图界面,提供将对象绘制到显示设备的方法。 可以采用以下几种方式创建一个Graphics对象。,10.3 GDI+绘制图文的技术基础,1在窗体或控件的Paint事件中直接引用Graphics对象 每个窗体或控件都有一个Paint事件,该事件参数中包含了当前窗体或控件的Graphics对象,在为窗体或控件编写绘图代码时,一般使用此方法来获取图形对象的引用。例如: private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.G

5、raphics; /图文绘制代码 ,10.3 GDI+绘制图文的技术基础,2调用当前窗体或控件的CreateGraphics方法 调用当前窗体或控件的CreateGraphics方法以获取对Graphics对象的引用。如果要在已存在的窗体或控件上绘图,可以使用这种方法。例如: Graphics g = this.CreateGraphics(); /图文绘制代码,10.3 GDI+绘制图文的技术基础,3调用Graphics类的FromImage静态方法 调用Graphics类的FromImage静态方法,从继承自图像的任何对象创建Graphics对象,此方法通常用于更改已存在图像。例如: Bi

6、tmap bitmap = new Bitmap(“C:CProgameb1.bmp“); Graphics g = Graphics.FromImage(bitmap); 或者: Image img = Image.FromFile(g1.gif); Graphics g = Graphics.FromImage(img);,10.3 GDI+绘制图文的技术基础,10.3.3 颜色 颜色是进行图形操作的基本要素。任何一种颜色的表现效果都可以由3个色彩分量和1个透明度参数来确定,每个分量占1B。三原色及色彩透明度的取值设定分别如下。 R:红色,取值范围为0255,255为饱和红色。 G:绿色,

7、取值范围为0255,255为饱和绿色。 B:蓝色,取值范围为0255,255为饱和蓝色。 A:即Alpha值,表示一种颜色的透明度,取值范围为0255,0为完全透明,255为完全不透明。在GDI+中,颜色封装在Color结构中,可用以下几种方法创建颜色对象。,10.3 GDI+绘制图文的技术基础,1利用FromArgb指定任意颜色 这种方法可使用3个参数或4个参数两种形式。 通过3个参数指定颜色的构造函数如下: public static Color FromArgb(int red,int green,int blue); 例如: Color red = Color.FromArgb(255

8、,0,0); /纯红色 /纯蓝色(也可采用十六进制表示) Color rblue = Color.FromArgb(0,0, 0xff); 以上三种颜色设置中,Alpha使用了默认值255,即完全不透明。 通过4个参数指定颜色的构造函数如下: public static Color FromArgb(int alpha,int red,int green,int blue); 例如: Color red = Color.FromArgb(128,255,0,0); /半透明的纯红色。,10.3 GDI+绘制图文的技术基础,2直接使用系统预定义的颜色 在Color结构中已经预定义了141种颜色,

9、可以直接使用。例如: Color myColor; MyColor = myColor.Red; /红色 MyColor = myColor.Brown; /棕色,10.3 GDI+绘制图文的技术基础,10.3.4 坐标系统 GDI+使用Point、Size和Rectangle结构来进行绘图时的坐标定位和尺寸确定。 Point结构 GDI+的Point表示一个二维平面上的点,可以使用一些公共属性获取或设置Point的X和Y坐标。声明和构造Point的示例代码如下: Point p = new Point(85,100); Size结构 GDI+使用Size表示一个尺寸(单位:像素),Size结

10、构包含宽度和高度两个参数。可以使用一些公共属性获取或设置Point的X坐标和Y坐标。声明和构造Size的示例代码如下: Size s = new Size(50,80);,10.3 GDI+绘制图文的技术基础,Rectangle结构 Rectangle可以采用两种构造函数,一种是指定矩形左上角的X和Y坐标以及矩形的宽和高,声明和构造Rectangle示例代码如下: Rectangle rct = new Rectangle(10,20,150,300); 另外,Rectangle也可以结合运用Point和Size这两个结构,例如以上的示例,也可采用以下代码实现: Point p = new P

11、oint(10,20); Size s = new Size(150,300); Rectangle rct = new Rectangle(p,s);,10.3 GDI+绘制图文的技术基础,10.3.5 画笔与画刷 在GDI+中则将其绘图的工具分为笔和画刷两种。 笔是Pen类的实例,用于绘制线条或空心图形。通过笔的With属性可以设置其宽度,Color属性可以设置其颜色,StartCap和EndCap属性设置其起点或终点的样式,DashStyle属性则可以设置其线样式,如实线、虚线或点划线等。 实例化笔对象代码如下: Pen pen1 = new Pen(Color.Red);/1个像素宽的

12、红色笔 Pen pen2 = new Pen(Color.Black,5); /5个像素宽的黑色笔,10.3 GDI+绘制图文的技术基础,也可以从画刷(详见画刷介绍)对象实例化笔,示例代码如下: /1个像素宽的红色画刷 SolidBrush brush1 = new SolidBrush (Color.Red); Pen pen1 = new Pen(brush1); /1个像素宽的红色笔 Pen pen2 = new Pen(brush1,5);/5个像素宽的红色笔 画刷(Brush) 画刷是从Brush类派生的任何类的实例,可与Graphics对象一起使用来创建实心图形或呈现文本对象。还可

13、以用于填充各种图形,如矩形、椭圆或多边形等。 实例化画刷对象的方法与实例化笔对象类似。,10.4 绘制基本图形,10.4.1 绘制直线 GDI+中有两种绘制直线的方法:DrawLine()方法和DrawLines()方法。前者一次只绘制一条直线,后者一次可绘制多条直线。 (1)先定义一对坐标点,再将其作为起点和终点进行划线。其构造函数如下: public void DrawLine(Pen pen,Point startPoint,Point endPoint);,10.4 绘制基本图形,示例代码如下: private void Form1_Paint(object sender, Paint

14、EventArgs e) Graphics g = e.Graphics; Pen pen = new Pen(Color.Blue,3); Point startPoint = new Point(20,20); Point endPoint = new Point(200,90); g.DrawLine(pen,startPoint,endPoint); ,10.4 绘制基本图形,(2)直接定义一对起点和终点坐标并进行划线。其构造函数如下: public void DrawLine(Pen pen, nt x1, int x2, int y1, int y2); 则以上示例代码可改写如下:

15、 private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; Pen pen = new Pen(Color.Blue,3); g.DrawLine(pen,20,20,200,90); ,10.4 绘制基本图形,3)定义多对坐标点,再将它们作为首尾相连的起始点连接划线。其构造函数如下: public void DrawLine(Pen pen, Point points); 示例代码如下: private void Form1_Paint(object sender, PaintEven

16、tArgs 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) ; g.DrawLines(pen, points); ,10.4 绘制基本图形,10.4.2 绘制多边形 多边形既有轮廓又是封闭的,所以,可以将多边形划分为空心多边形和实心多边形(有填充)两种。GDI+中与之对应的绘图方法分别为DrawPolygon()方法和FillPolygon()方法。不过要注意,DrawPolygon()方法需使用笔,FillPolygon()方法需使用画刷,这样才可分别绘制空心或实心的多边形。,10.4 绘制基本图形,示例代码如下: private void Form1_Paint(object sender, PaintEventArgs e) Grap

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

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

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