GDI+存在的意义:将编程与具体硬件实现细节分开。
GDI+步骤:获取画布,绘制图像、处理图像
命名空间:
System.Drawing命名空间提供对GDI+基本图形功能的访问
System.Drawing.Drawing2D:提供高级的二维和矢量图形功能
System.Drawing.Imaging:命名空间提供高级GDI+图像处理功能
System.Drawing.Text:提供高级GDI+排班功能
System.Drawing.Pringting:提供打印相关服务
System.Drawing.Design:扩展设计时,用户界面逻辑和绘制的类。用于扩展,自定义。
画图工具:
Graphics(画布):类封装一个GDI+绘图图面,提供将对象绘制到显示设备的方法,Graphics与特定的设备上下文关联。画图方法都被包括在Graphics类中,在画任何对象之前都需要创建一个Graphics类实例作为画布。
创建画布 (三种方法):
适用场景:为控件创建绘制代码。
示例:
//窗体的Paint事件的响应方法
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; } |
//直接重载控件或窗体的OnPaint方法:
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; } |
注意:Paint事件在重绘控件时发生。
适用场景:在已存在的窗体或控件上绘图
Graphics g = this.CreateGraphics(); |
适用场景: 需要更改已存在的图像
Image img = Image.FromFile(@"IMG\graph.jpg"); Graphics g = Graphics.FromImage(img); |
方法成员:
名称 |
说明 |
DrawArc |
画弧。 |
DrawBezier |
画立体的贝尔塞曲线。 |
DrawBeziers |
画连续立体的贝尔塞曲线。 |
DrawClosedCurve |
画闭合曲线。 |
DrawCurve |
画曲线。 |
DrawEllipse |
画椭圆。 |
DrawImage |
画图像。 |
DrawLine |
画线。 |
DrawPath |
通过路径画线和曲线。 |
DrawPie |
画饼形。 |
DrawPolygon |
画多边形。 |
DrawRectangle |
画矩形。 |
DrawString |
绘制文字。 |
FillEllipse |
填充椭圆。 |
FillPath |
填充路径。 |
FillPie |
填充饼图。 |
FillPolygon |
填充多边形。 |
FillRectangle |
填充矩形。 |
FillRectangles |
填充矩形组。 |
FillRegion |
填充区域。 |
PEN类(画笔):绘制指定宽度和样式的直线。使用DashStyle属性绘制几种虚线,可以使用各种填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理。
创建画笔:
//用指定的颜色实例化一只画笔的方法如下: public Pen(Color); //用指定的画刷实例化一只画笔的方法如下: public Pen(Brush); //用指定的画刷和宽度实例化一只画笔的方法如下: public Pen(Brush , float); //用指定的颜色和宽度实例化一只画笔的方法如下: public Pen(Color, float); //实例化画笔的语句格式如下: Pen pn=new Pen(Color.Blue); //或者 Pen pn=new Pen(Color.Blue,100); |
属性成员:
名称 |
说明 |
Alignment |
获得或者设置画笔的对齐方式。 |
Brush |
获得或者设置画笔的属性。 |
Color |
获得或者设置画笔的颜色。 |
Width |
获得或者设置画笔的宽度。 |
Brush类(画刷):是一个抽象的基类,因此它不能被实例化,用它的派生类进行实例化一个画刷对象。
结构组件:
Point类:表示一个具体的点。
创建Point实例:
public Point(int x,int y) |
Size类:表示尺寸(像素为单位)。Size结构包含宽度和高度
创建Size实例:
Size s = new Size(Width, Height); |
Rectangle结构:一个构造函数的参数是X坐标,Y坐标,宽度和高度,另一个构造函数的参数是Point和Size结构,
创建Rectangle实例:
//用指定的位置和大小初始化Rectangle类的新实例。 public Retangle(Point,Size); public Rectangle(int,int,int,int); |
属性成员:
名称 |
说明 |
Bottom |
底端坐标 |
Height |
矩形高 |
IsEmpty |
测试矩形宽和高是否为0 |
Left |
矩形左边坐标 |
Location |
矩形的位置 |
Right |
矩形右边坐标 |
Size |
矩形尺寸. |
Top |
矩形顶端坐标 |
Width |
矩形宽 |
X |
矩形左上角顶点X坐标 |
Y |
矩形左上角顶点Y坐标 |
风格组件:
Color类(颜色以及透明度):由透明度(A)和三基色(R,G,B)所组成
属性成员:
名称 |
说明 |
A |
获取此Color结构的alpha分量值,取值(0~255)。 |
B |
获取此Color结构的蓝色分量值,取值(0~255)。 |
G |
获取此Color结构的绿色分量值,取值(0~255)。 |
R |
获取此Color结构的红色分量值,取值(0~255)。 |
Name |
获取此Color结构的名称,这将返回用户定义的颜色的名称或已知颜色的名称(如果该颜色是从某个名称创建的),对于自定义的颜色,将返回RGB值。 |
静态方法成员:
名称 |
说明 |
FromArgb |
从四个8位ARGB分量(alpha、红色、绿色和蓝色)值创建Color结构。 |
FromKnowColor |
从指定的预定义颜色创建一个Color结构。 |
FromName |
从预定义颜色的指定名称创建一个Color结构。 |
获取设置一个具体像素的颜色值示例:
//(1)定义Bitmap Bitmap myBitmap = new Bitmap("c:\\MyImages\\TestImage.bmp"); //(2)定义一个颜色变量把在指定位置所取得的像素值存入颜色变量中 Color c = new Color(); //获取此Bitmap中指定像素的颜色。 c = myBitmap.GetPixel(10, 10); //(3)将颜色值分解出单色分量值 int r, g, b; r = c.R; g = c.G; b = c.B; |
Font类(字体风格):定义特定文本格式,包括字体、字号和字形属性。
创建Font实例:
//"字体名"为Font的FontFamily的字符串表示形式 public Font(string 字体名, float 字号,FontStyle 字形)//字号和字体为可选项 public Font(string 字体名,float 字号) |
属性成员:
名称 |
说明 |
Bold |
是否为粗体。 |
FontFamily |
字体成员。 |
Height |
字体高。 |
Italic |
是否为斜体。 |
Name |
字体名称。 |
Size |
字体尺寸。 |
SizeInPoints |
获取此 Font对象的字号,以磅为单位。 |
Strikeout |
是否有删除线。 |
Style |
字体类型。 |
Underline |
是否有下划线。 |
Unit |
字体尺寸单位。 |
重要参数:
GraphicsPaths(路径):表示一系列连续的线条和曲线。
创建路径:
public GraphicsPath(System.Drawing.PointF[] pts, byte[] types, System.Drawing.Drawing2D.FillMode fillMode) //fillMode 填充方式 point[] 结构数组 types[] 对应点的类型 枚举PathPointType |
PathPointType枚举:
名称 |
说明 |
Start |
路径起点 |
Bazier |
默认贝塞尔曲线 |
PathTypeMark |
遮盖点 |
DashMode |
添加椭圆 |
PathMarker |
路径标记 |
CloseSubpath |
子路径终结点 |
Bazier3 |
立体贝塞尔曲线 |
方法成员:
名称 |
说明 |
AddArc |
添加圆弧 |
AddBezier |
添加立方贝塞尔曲线 |
AddClosedCurve |
添加闭合曲线 |
AddEllipse |
添加椭圆 |
AddLine |
添加线段 |
AddPath |
添加路径,bool参数表示是否将添加路径的第一个图形作为当前路径最后一个图形的子成员 |
AddPie |
添加扇形轮廓 |
AddPolygon |
添加多边形 |
AddRectangle |
添加矩形 |
AddString |
添加字符串 |
ClearMarkers |
清除所有标志 |
CloseAllFigures |
闭合所有开放图形 |
CloseFigure |
闭合当前图形 |
Reverse |
反转数组各点顺序 |
Reset |
清空,并做好接收准备 |
StartFigure |
不闭合当前图形就开始新的图形 |
GetBounds |
获得边界(矩形) |
GetLastPoint |
获得最后一个点 |
Regions(组合图形):由矩形和路径组成
创建组合图形:
public Region(System.Drawing.Drawing2D.RegionData rgnData) public Region(System.Drawing.Drawing2D.GraphicsPath path) public Region(System.Drawing.Rectangle rect) public Region(System.Drawing.RectangleF rect) |
方法成员:
名称 |
说明 |
Complement |
更新,以包含与参数不相交的部分 |
Exclude |
更新,以仅包含内部以及与参数不想交的部分 |
Union |
更新为与指定参数的并集 |
Xor |
更新为与指定参数的并集与交集的差集 |
Translate |
指定量偏移坐标 |
Intersect |
更新为与指定参数的交集 |
IsInfinite(g) |
测试此region是否在指定g上具有无限内部 |
MakeEmpty |
清空 |
MakeInfinite |
初始化为无限内部 |