.Net中的GDI+编程
IT商界
认识DGI+
GDI+是Microsoft Windows XP以及后续Windows操作系统的图形子系统,同时又是.Net提供的一种新的简单、快速的图形图像开发技术。顾名思义,GDI+是GDI(Windows早期版本提供的图形编程接口)的后续版本。GDI+是一种应用程序编程接口(API),它的所有接口都被包含在.Net框架中以类的形式存在。
程序员可利用GDI+这样的图形编程接口在屏幕显示文字,图片等信息,而不需要考虑特定显示设备的具体情况。应用程序的程序员调用GDI+类提供的方法,而这些方法又反过来调用特定的设备驱动程序。GDI+将应用程序与图形硬件隔离,而正是这种隔离允许开发人员创建与设备无关的应用程序。
GDI+和GDI的区别
使用GDI(Windows 的以前版本中包括的图形设备接口)编写程序,就会熟悉设备上下文的知识。设备上下文是Windows使用的一种结构,用于存储与特殊显示设备的功能和指定如何在该设备上绘制项目的属性相关的信息。用于视频显示的设备上下文还与显示的特定窗口关联。首先,你会获得一个设备上下文的句柄(HDC),然后将该句柄作为参数传递至实际进行绘制的GDI函数。你还可将此句柄作为参数传递给获取或设置设备上下文属性的GDI函数。
使用GDI+,你不需要再使用句柄或设备上下文,而只需创建一个Graphics对象,然后在你熟悉的面向对象样式 myGraphicsObject.Drawx(参数)(drawx代表要显示的图形)中调用其方法。Graphics对象是GDI+的核心。
下面我们通过4个简单的例子来看看如何在VB.Net中使用GDI+进行编程。这4个例子中的前3个分别为几个基本的GDI+编程绘制直线,矩形,和显示文字。第4个例子是将图像中的颜色进行批量的替换。
例一:绘制直线
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim formGraphics As Graphics '初始化Graphics对象
formGraphics = Me.CreateGraphics '创建Graphics对象
Dim Bpen As New Pen(Color.Blue)'初始化Pen对象,Pen表示使用钢笔来画,Color.Blue表示刷子颜色是蓝色
formGraphics.DrawLine(Bpen, 23, 23, 144, 144)'DrawLine是Graphics中画直线的方法。括号中的Bpen是使用的画图工具,后面的坐标是表示直线的起点和终点。
End Sub
程序说明:直线是几何图形中最基本的图形,我门可以使用NET中的GDI+很方便地在窗口中画出直线。先创建Graphics对象,再使用Graphics对象中的DrawLine来绘制直线。DrawLine后的参数分别是:绘制工具,直线的起点X和Y、直线的终点X和Y。
例二:绘制矩形
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System. Windows.Forms .PaintEventArgs) Handles MyBase.Paint
Dim hi, we As Integer
Dim formGraphics As Graphics '初始化Graphics对象
formGraphics = Me.CreateGraphics '创建Graphics对象
Dim h, w As Integer
h = Me.Height / 7 '矩形的高是窗口的1/7
w = Me.Width '矩形的宽
Dim redBrush As New SolidBrush(Color.Red) '初始化SolidBrush对象,SolidBrush表示使用刷子来画,Color.Red表示刷子颜色是红色
formGraphics.FillRectangle(redBrush, 0, 0, w, h) '画出矩形
End Sub
程序说明:先创建Graphics对象,再使用Graphics对象中的FillRectangle进行绘制矩形。FillRectangle后的参数是:绘制工具,矩形的左顶点坐标X和Y,矩形的高和宽。
例三:显示文字
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim formGraphics As Graphics '初始化Graphics对象
formGraphics = Me.CreateGraphics '创建Graphics对象
Dim drawFont As New Font("Arial", 16) '初始化字体和字体大小
Dim drawBrush As New SolidBrush(Color.Red) '使用刷子画字体,颜色是白色
Dim drawPoint As New PointF(0.0F, 0.0F) '文字出现的位置,即X,Y的坐标
formGraphics.DrawString("I LOVE YOU 睿睿", drawFont, drawBrush, drawPoint) '画出文字。
End Sub
程序说明:先创建Graphics对象,再使用Font对象声明使用的字体和字体大小,最后使用Graphics对象中的DrawString进行显示文字。在这个例子中我们可以看出GDI+不但可以显示英文,而且还可以显示中文。DrawString后的参数分别是:要显示的文字、使用的字体、绘制工具、文字出现的位置。
例四:颜色替换
首先准备一幅有红色的图片,因为在这个程序中我们将会把图片中的红色替换为蓝色。再在窗口中添加一个Button,保持其默认属性。然后添加如下代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Hand
les Button1.Click
Dim filename As String
filename = "F:\Documents and Settings\Administrator\My Documents\red.bmp"
'这是我的图片文件地址,你可以改为其他地址或文件。
Dim bmp As New Bitmap("F:\Documents and Settings\Administrator\My Documents\red.bmp")
'用一个图片实例化bitmap对象
Dim bmpheght As Integer
Dim bmpw As Integer
Dim i, k As Integer
Dim cloAs
bmpheght = CType(bmp.Height, Integer)'获得图片的高
bmpw = CType(bmp.Width, Integer)'获得图片的宽
Label1.Text = bmpheght'显示图片的高
Button1.Text = bmpw'显示图片的宽
For i = 0 To bmpw - 1
For k = 0 To bmpheght - 1
cloAs = bmp.GetPixel(i, k).Name.ToString
'获得像素点的颜色,返回颜色的十六进制代码
If cloAs = "ffff0000" Then'ffff0000
'是红色的十六进制代码,对于其他的颜色代码请见MSDN。
bmp.SetPixel(i, k, System.Drawing.Color.Blue)
'用蓝色替换红色
End If
Next
Next
Dim nfilename As String
nfilename = "F:\Documents and Settings\Administrator\My Documents\red1.bmp"
bmp.Save(nfilename) '将改变后的文件保存为一个新文件
bmp.Dispose()'释放bitmap对象
IO.File.Delete(filename)'删除原来的文件
Dim newbmp As New Bitmap(nfilename)
newbmp.Save(filename)'将新文件改名为原来的文件
newbmp.Dispose()
IO.File.Delete(nfilename)'删除新文件
Debug.WriteLine("end")
End Sub
程序说明:首先使用准备好的图片来初始化一个Bitmap对象,这个对象是GDI+中的一个专门处理图片的对象。接着获得图片的长和宽,利用获得的图片的长和宽作为循环的条件,使用Bitmap中的GetPixel来获得图片中每个像素的值,并在此循环中判断是否为红色,如果是它,将它替换为蓝色。
当循环完成后,将替换的文件保存为一个新的文件,将老文件删除,再将此替换的文件的文件名改为老文件的文件名进行保存。
总 结
本文通过对GDI+编程的4个例子,力图让各位读者对GDI+有一个初步的了解。本文的前3个程序可以说是GDI+的基本功能,我们不但可以直接使用文中提到的3种方法来绘制图形,还可以使用GDI+中的其他方法绘制更多的图形,如椭圆、圆、多边形、折线等。这些方法的使用和文中提到的绘制线、绘制矩形都差不多,所以可以归纳为下面这个格式:
formGraphics.DrawXXXX(参数);其中XXXX表示具体使用的是什么方法。参数的格式一般来说是:绘制工具、坐标。在最后一个例子中使用了GDI+中的Bitmap类,编写一个图片颜色替换的程序,以便让读者知道GDI+中用于处理图片的类。
总地来说,GDI+的编程比以前的GDI简单多了,掌握起来也不需要花太多的时间,而且其功能也不压于GDI。所以掌握好GDI+的编程会使你在图形图像方面的程序做得更完美!
