利用GDI+绘制图形时候,使用的是System.Drawing名称空间下重要类:Graphics类。本节我们讲通过实例模拟现在网站流行的随机验证码功能。功能描述:在生成的的图片上,随机显示几位数字或字幕,用于用户输入操作。
在GDITec Web应用程序里,添加一个Web窗体,命名为GDI_Sample2.aspx,我们来设计逻辑代码:
'-----code begin-----
Imports System.Drawing
Imports System.Drawing.Bitmap
Imports System.Drawing.Graphics
Imports System.Drawing.Imaging
Public Class GDI_Sample2
Inherits System.Web.UI.Page
#Region " Web 窗体设计器生成的代码 "
'此处省略了窗体设计器生成的代码
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Dim objBitmap As Bitmap
Dim i As Integer
'声明随机种子,用来随机产生1000个象素点的坐标
Dim objRandom As Random
'声明画布对象
objBitmap = New Bitmap(150, 50)
'声明Graphics对象
Dim objGraphics As Graphics
'指定画布
objGraphics = Graphics.FromImage(objBitmap)
'设置背景
objGraphics.Clear(Color.Violet)
'声明随机种子
objRandom = New Random
'生成随机的500掺杂点
For i = 1 To 500
objBitmap.SetPixel(objRandom.Next(150), objRandom.Next(50), Color.Snow)
' objBitmap.SetPixel的方法是绘制点,参数3个,分别是X,Y ,Color
Next
For i = 1 To 5
'声明并定义字体,字体大小在10-25之间随机
Dim objfont As Font = New Font("宋体", objRandom.Next(10, 35), FontStyle.Bold)
objGraphics.DrawString(Chr(objRandom.Next(Asc("A"), Asc("Z"))), objfont, Brushes.Black, 30 * (i - 1), objRandom.Next(20))
'objGraphics.DrawString(的重载有6种,上句中的参数分别是字符串,字体,画笔,X,Y
Next
' 声明画笔对象,
Dim objpen As Pen
'生成5条随机的彩线,对生成的8个字符上面画线
For i = 1 To 8
'实例化画笔,并设置随机生成画笔颜色,定义画笔笔触大小为1个象素
objpen = New Pen(Color.FromArgb(objRandom.Next(255), objRandom.Next(255), objRandom.Next(255)), 1)
objGraphics.DrawLine(objpen, objRandom.Next(150), objRandom.Next(50), objRandom.Next(150), objRandom.Next(50))
'objgraphics.DrawLine 共有4种重载函数,这里我们使用的四个参数分别是画笔,X1,Y1,X2,Y2
Next
'将objGraphics对象以指定的图形格式(这里是Gif)保存到指定的Stream对象,并输出到客户端。
objBitmap.Save(Response.OutputStream, Drawing.Imaging.ImageFormat.Gif)
End Sub
End Class
'-----code end ------
保存编译后,运行结果如图11.2所示。
图11.2 GDI_Sample2.aspx运行结果
如果要在应用程序用使用GDI_Sample2.aspx生成图片的功能,必须有另外一个Web页面引用。
我们再新建一个Web页面,命名为GDI_Sample3.aspx,添加一个Image控件,设置Image控件的属性:
<asp:Image id="Image1" runat="server" Width="141px" Height="51px"
ImageUrl="GDI_Sample2.aspx"
></asp:Image>
将GDI_Sample3.aspx保存编译后,预览如图11.3所示。
图11.3 GDI_Sample3.aspx运行结果