GDI+( Graphics Device Interface Plus)是 Windows操作系统用来执行绘画及其他相关图形操作的一套子系统,是由. Net Framework中的System.Drawing命名空间提供的一组通过C++类实现的应用程序编程接口,主要负责显示屏幕和打印设备输出的有关信息,它使开发人员可以利用 Windows内置的图形功能轻松地创建图形应用程序。
作为图形设备接口的GDI+使得应用开发人员在输出屏幕和打印机信息时无需考虑具体显示设备的细节,只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离从而使开发人员编写与设备无关的应用程序变得非常容易。本教程将以 VB.Net中的GDI+的技术来实现各种绘图功能。
GDI+绘图的流程
- 创建 Graphics对象;
- 创建画笔和画刷;
- 使用 Graph对象的绘图方法绘制图形输出文字等;
- 释放 Graphics对象和绘图对象所占用的系统资源。
'Form1_Paint是当窗体重绘制图形时候触发,如:窗体初始化、窗体改变大小,都会触发这个paint事件来完成图形的重画工作。
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
'创建 Graphics对象
Dim g As Graphics = e.Graphics
'创建画刷
Dim b As SolidBrush = New SolidBrush(Color.Blue)
'创建字体
Dim f As Font = New Font("宋体", 15, FontStyle.Bold)
'绘制文字
g.DrawString("Hello,World!", f, b, 30, 60)
'释放 Graphics对象和绘图对象所占用的系统资源
f.Dispose()
b.Dispose()
g.Dispose()
End Sub
刨建 Graphics对象
在VB.NET中用GDI+创建绘图,必须先创建 Graphics对象。 Graphices对象表示GDI+的绘图表面,是用来绘制图形图像的容器。创建 Graphics对象后,才可以使用GDI+的画笔、
画刷等结合Color、Font等对象进行绘制线条形状、填充区域、显示文本图像等操作。
VB. NET中的窗体和所有具有Text属性的控件都可以作为绘制图形的表面。创建Graphics对象有以下3种方法。
1.使用 Create Graphics方法创建
通过使用某控件或窗体的 CreateGraphics方法来灵活获取对Graphics对象的引用,该对象表示该控件或窗体的绘图表面。这是一种常见的创建方法,其格式为
Dim 对象名 As Graphics
对象名=窗体名(或控件名).CreateGraphics
2.利用PaintEventArgs参数传递 Graphics对象
通过窗体或控件的Pait事件可以直接完成图形绘制,在编写Pant事件处理程序时,利用参数 PaintEventArgs提供的窗体图形对象。格式为
Dim 对象名 As Graphics
对象名=e.Graphics
3.从 Image对象创建
创建 Graphics对象还可以由Image对象或者lmage类派生的任何对象来创建。调用Graphics.Fromlmage,提供要从其中创建 Graphics对象的Imge变量的名称,如下面代码所示:
Dim myBitmap as New Bitmap("C:\myPic")
Dim g as Graphics =Graphics.Fromlmage( myBitmap)
创建画笔和画刷
在获得一个 Graphics对象之后,接下来就要决定在表面上如何进行绘制。可能需要以
下对象中的一个或几个画笔、画刷。在GDI+中,Pen类和Brush类分别表示画笔和画刷。
在需要绘制直线、矩形和曲线的边界时使用画笔在需要填充图形对象时使用画刷。
1.画笔Pen
在Graphics画布上处理图形的轮廓部分需要使用的工具是画笔Pen。通过使用Pen类可以设置所画线条的颜色、线宽和样式,在使用前需要引用System.Drawing.Drawing2D名称空间。创建画笔的格式为:
Dim pen As New Pen(Color.Brown, 5)
2.画刷Brush
画刷Brush主要用于封闭图形的填充.
- 只能用一种颜色填充区域的称为单色刷,声明单色刷的格式为:
Dim mybrush As New SolidBrush(Color.Brown)
- 用一个图片来填充图形的画刷称为纹理刷,声明纹理刷的格式为:
Dim d As New TextureBrush(New Bitmap("path"))
- 用线性渐变色来填充图形的画刷称为渐变刷,声明渐变刷的格式为:
Dim d As New LinearGradientBrush(New Point(10), New Point(10), Color.White, Color.Black)
- 用条纹模式来填充图形的画刷称为网格刷,声明网格刷的格式为:
Dim d As New HatchBrush(HatchStyle.BackwardDiagonal, Color.White, Color.Black)
图形绘制
1. 绘制直线的格式为:g.DrawLine(pen, 10, 10, 250, 10) 或者 g.DrawLine(pen, New Point(10, 10), New Point(250, 10))
2. 绘制矩形的格式为:g.DrawRectangle(pen, 10, 10, 250, 10)
2.5 绘制圆 g.DrawEllipse(pen, 10, 10, 50, 50)
3. 绘制椭圆的格式为:g.DrawEllipse(pen, New Rectangle(10, 10, 50, 10))
参数pen为画笔,参数rect为Rectangle结构,指定圆的外切矩形区域。
4. 绘制弧线的格式为:
5. 绘制扇形
6. 绘制非闭合曲线
7. 填充图形填充矩形的格式与对应绘制图形的方法相似,区别是方法名由“绘制”改为“填充”,对应参数pen换成brush。
8. Clear方法使用Clear方法可以清除整个画布并以指定的背景色填充。
使用 Graphics对象
在创建 Graphics对象、画笔或画刷之后,就可以绘制直线、边框、曲线或图像了。 Graphis类为绘制和填充图形、曲线或图像提供了相应的方法。例如, DrawEllipse使用特定的画
笔来绘制椭圆的边界,而FillEllipse将使用一种填充颜色来绘制椭圆。绘制方法使用画笔作为参数,而填充方法则使用画刷作为参数。
释放 Graphics对象
在 Graphics对象使用完毕后,必须将其释放。在VB.NET中提供了一个 Dispose方法,此方法可以用来释放Graphics对象、画笔对象等所占用的全部资源。
例如创建g为 Graphics对象,使用完后用g.Dispose()释放。