.net 下用gdi+绘制注册验证码

虽然本人不是搞2d/3d绘图的,但毕竟是搞.net开发的,对于gdi+方面不得不有所了解,而用的最多的就是用gdi+生成注册的验证码。
GDI+:Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能;在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用DirectX处理三维(3D)的图形图像,图形图像处理用到的主要命名空间是System . Drawing:提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等.

Graphics  画板
Bitmap  位图
Brush  笔刷
Font  字体
Icon  图标
Image  图象
Pen  画笔
Color  颜色


一般来讲,是先建立一个Graphics(画板),再拿一只Brush(笔刷)或者Pen(画笔),选择特定的Font(字体)或Color(颜色),画出一个Bitmap(位图),Icon(图标)或者Image(图象)。

各个类具体怎么使用,大家还是找相关信息查询吧,我在这里只研究画出验证码所用到的类与方法:
1.Graphics(画板)
这是画任意图形都需要用到的类,假想实际画画的时候,如果你没有画板,你如可作画呢?
2.Brush(笔刷)或Pen(画笔)
在这里我将选用Brush作画,其实用Pen道理也是一样的
3.Font(字体)和Color(颜色)
验证码本质上就是将文字转化成图形,我在这里将把使用特定字体的文字转化成特定颜色的图形。
4.Bitmap(位图)
因为最终会显示在界面上,所以必须先将画图结果保存在图形文件中,然后显示出来。


第一步:准备验证码文字。
string _str = "1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
string str = _str.Split(new char[] { ',' });
具体什么意思就不多讲了。
第二步:生成验证码文字
Random ran = new Random((int)DateTime.Now.Ticks);
string result = "";
for (int i = 0; i < 4; i++)
{
 result += str[Math.Abs(ran.Next(str.Length))];
}
在这里使用了随机函数类:Random,然后通过数组下标的形式随机选出四个数字或字母。
第三步:建立位图
Bitmap img = new Bitmap((int)result.Length * 15, 30);
构造函数的参数是width和height,没什么好说的,主要看你要生成多大的验证码图片。
第四步:作图
Graphics g = Graphics.FromImage(img);
g.DrawString(result, new Font("宋体", 13), new SolidBrush(Color.Blue), new PointF(5,5));
首先建立画板,并通过构造函数与位图关联。
然后通过DrawString方法将字符串画成图形,使用了宋体,13号字,使用蓝色笔刷作图,在画板坐标为5,5的地方开始作图。
第五步:将画图结果保存为文件
img.Save(@"c:\a.jpg");
没什么好说的。

好了,以上就是用Gdi+生成验证图片的全过程。

 

参考文章:

解析.Net框架下的GDI+编程

http://developer.ccidnet.com/art/322/20021217/33871_1.html

使用 GDI+

http://www.cnblogs.com/zuopyu/archive/2005/08/24/221408.html

c# GDI+简单绘图(一)

http://www.cnblogs.com/yangjunwl/articles/1114148.html

c# GDI+简单绘图(二)

http://www.cnblogs.com/yangjunwl/articles/1114152.html

c# GDI+简单绘图(三)

http://www.cnblogs.com/yangjunwl/articles/1114153.html

GDI+实现统计图表控件

http://blog.csdn.net/johnsonTj/archive/2005/02/18/291849.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值