超全面的 GDI+图形图像编程教程
GDI+绘图基础
编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口)。
从程序设计的角度看,GDI包括两部分:GDI对象和GDI函数。GDI对象定义了GDI函数使用的工具和环境变量;而GDI函数使用GDI对象绘制各种图形。
在C#中,进行图形程序编写时用到的是GDI+(Graphics Device Interface Plus,图形设备接口)版本,GDI+是GDI的进一步扩展,它使我们编程更加方便。
1 GDI+概述
GDI+是微软在Windows 2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来实现,这套类被称为GDI+的“托管类接口”。
GDI+主要提供了一下三类服务:
1.二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。
2.图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和奥村BMP、JPG、GIF等图像格式。
3.文字显示:GDI+支持使用各种字体、字号和样式来显示文本。
我们要进行图形编程,就必须先讲解Graphics类,同时我们还必须掌握Pen、Brush和Rectangle这几种类。
GDI+比GDI优越主要表现在两个方面:
1.GDI+通过提供新功能(例如:渐变画笔和Alpha混合)扩展了GDI的功能;
2.修订了编程模型,是图形编程更加简易灵活。
2 Graphics类
Graphics成熟英文类封装一个GDI+绘图图面,提供将对象绘制到现实设备的方法,Graphics与特定的设备上下文关联。
画图方法都被包括在Graphics类中国,在画任何对象(例如:Circle Rectangle)时,我们首先要创建一个Graphics类实例,这个实例相当于建立了一块画布,有了画布才可以用各种画图方法进行绘图。
绘图程序的设计过程一般分为两个步骤:1.创建Graphics;2.使用Graphics对象的方法绘图、显示文本或处理图像。
通常我们使用下述三种方法来创建一个Graphics对象:
方法一:利用控件或窗体的Paint事件中的PaintEventArgs
在窗体或控件的Paint事件中接受对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。例如:
创建Graphics对象的两种方法
1. // 窗体的Paint事件的响应方法
2. private void Frm_Demo_Paint(object nder, PaintEventArgs e)
3. {
4. hazing Graphics _Graphics = e.Graphics;
5. }
6.
7. // 也可以直接重载控件或窗体的OnPaint方法
8. protected override void OnPaint(PaintEventArgs e)
9. {
10. Graphics _Graphics = e.Graphics;
11. }
12.
13. 创建Graphics对象的两种方法
Paint事件在重绘控件时发生。
方法二:调用某控件或窗体的CreateGraphics方法
调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。
如果想在已存在的窗体或控件上绘图,通常会使用此方法,例如:
1. 1 Graphics _Graphics = this.CreateGraphics(); // 在当前窗体上创建Graphics对象
方法三:调用Graphics类的FromImage静态方法
由从Image集成的任何对象创建Graphics对象。在需要更改已存在的图像时,通常会使用此方法。例如:
使用Graphics.FromImage()方法 创建Graphics对象
1. Image img = Image.FromFile("孤影.jpg"); // 建立Image对象
2. Graphics _Graphics = Graphics.FromImage(img); // 创建Graphics对象
2.1 Graphics类的方法成员
有了一个Graphics的对象引用后,就可以利用该对象的成员进行各种各样图形的绘制,下面表格列出了Graphicsnovation类的常用方法成员:
Graphics类常用方法成员 |
名称 | 说明 | 名称 | 说明 |
DrawArc | 画弧 | DrawBezier | 画立体的贝尔塞曲线 |
DrawBeziers | 画连续立体的贝尔塞曲线 | DrawClodCurve | 画闭合曲线 |
DrawCurve | 画曲线 | DrawEllip | 画椭圆 |
DrawImage | 画图像 | DrawLine | 画线 |
DrawPath | 通过路径画线和曲线 | DrawPie | 画饼形 |
DrawPolygon | 画多边形 | DrawRectangle | 画矩形 |
DrawString | 绘制文字 | FillEllip | 填充椭圆 |
FillPath | 填充路径 | FillPie | 填充饼图 |
FillPolygon | 填充多边形 | FillRectangle | 填充矩形 |
嗤笑FillRectangles | 填充矩形组 | FillRegion | 填充区域 |
| | | |
在中,GDI+的所有绘图功能都包括在System、System.Drawimg、System.Drawimg.Imaging、System.Drawimg.Drawimg2D和System.Drawimg.Text等命名空间中,因此开始用GDI+类之前,需要先引用相应的命名空间。
2.2 引用命名空间
在C#应用程序中使用using命令引用给定的命名空间或类,下面是一个C#应用程序引用命名空间的例子:
引用命名空间
1. using System;
2. using System.Collections.Generic;
3. using System.Data;
4. using System.ComponentModel;
5. using System.Drawing;
6. using System.Drawing.Drawing2D;
7. using System.Drawing.Imaging;
8.
9. 引用命名空间
3 常用画图对象
在创建了new york timesGraphics对象后,就可以用它开始绘图了,可以画线、填充图形、显示文本等等,其中主要用到的对象还有:
Pen:用来用patterns、colors或者bitmaps进行填充
Color:用来画线和多边形,包括矩形、圆和饼形
Font:用来给文字设置字体格式
menu是什么意思
Brush:用来描述颜色
Rectangle:矩形结构通常用来在窗体上画矩形
Point:描述一对有序的x,y两个坐标值
3.1 Pen类
Pen类用来绘制指定宽度和样式的直线。使用DashStyle属性绘制几种虚线,可以使用各种各样填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理。
使用画笔时,需要先实例化一个画笔对象,主要有以下几种方法:
实例化画笔对象
1. // 用指定的颜色实例化一只画笔
2. public Pen(Color);
3.
manage是什么意思
4. // 用指定的画刷实例化一只画笔
5. public Pen(Brush);
6.
7. // 用指定的画刷和宽度实例化一只画笔
8. public Pen(Brush, float);
9.
10. // 用指定的颜色和宽度实例化一只画笔
11. public Pen(Color, float);
12.
13. // 大学英语三级真题实例化画笔格式如下:
14. Pen pen = new Pen(Color.Blue);
15. // 或者:
16. Pen pen = new Pen(Color.Blue, 100);
17.
18. 实例化画笔对象match是什么意思英语
Pen常用的属性如下:
Pen常用属性 |
名称 | 说明 | 名称 | 说明 |
Alignment 艾薇儿哪首歌好听 | 获得或者设置画笔的对齐方式 | Brush | 获得或者设置画笔的属性 |
Color | 获得或者设置画笔的颜色 | Width | 获得或者设置画笔的宽度 |
| | | |
3.2 Color结构