private void pictureBox1_Click(object sender, EventArgs e)
{
//产生随机数
Random r = new Random();
//定义一个字符串用于接收产生的随机数字
string str=null;
for (int i = 0; i < 5; i++)
{
//将从0-9的数字,随机赋给Str
str += r.Next(0, 9);
}
//将str赋值给strCode,用于判断输入的验证码是否正确
strCode = str;
//定义bmp图像的宽度等于picture的宽度减去5
int bmpWidth = pictureBox1.Width - 5;
//定义bmp图像的高度等于picture的宽度减去5
int bmpHeight = pictureBox1.Height - 5;
//初始化一个bmp图像并设置好大小
Bitmap bmp = new Bitmap(bmpWidth,bmpHeight);
//用GDI重画这个图像
Graphics g = Graphics.FromImage(bmp);
//在bmp图片中添加数字
for (int i = 0; i < 5; i++)
{
//设定每个字符的坐标位置 i是第一个字符的坐标,
//在第二次循环的时候,第二个字符的横坐标与第一个不能相同,否则会两个字符会重叠
//所以在每次循环的时候,对字符的横坐标,都加一定的数值。
//第一次 i=0 ,i*30 =0 字符横坐标的位置从0开始
//第二次 i=1,i*30=30 字符横坐标的位置从30开始,以次类推
Point p = new Point(i * 30, 0);
//定义一个字符串数组,用来定义画出来的字体的样式
string[] strFont = {"宋体","华文新魏","隶书","黑体","微软雅黑","幼园"};
//定义一个颜色数组,用来定义画出来的字体的颜色
Color[] colorFont = {Color.Blue,Color.Black,Color.Green,Color.Yellow};
//开始画字符
//第一个参数,要画的字符
//第二个参数,字符的字体 初始化字体,并随机从StrFont中产生字体,30为字体大小,FontStyle为字体是样式
//第三个参数,字符的颜色 初始new SolidBrush 它表示此画笔的颜色。
//第四个参数,字符的位置
g.DrawString(str[i].ToString() ,new Font(strFont[r.Next(0,strFont.Length)],30,FontStyle.Bold),new SolidBrush(colorFont[r.Next(0,colorFont.Length)]),p);
}
///在bmp图片中添加不规的线条
for (int i = 0; i < 60; i++)
{
//定义画笔的起始位置,从bmp图像的宽度与高度之前随机产生
Point p1 = new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
//定义画笔的结束位置,从bmp图像的宽度与高度之前随机产生
Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
//画直线
g.DrawLine(new Pen(Brushes.Red), p1, p2);
}
///在bmp图片中添加有颜色的点
for (int i = 0; i < 200; i++)
{
//宝座像素点的位置,从bmp图像的宽度与高度之前随机产生
Point p =new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
//定义好某个象点的X坐标与Y坐标后,用指定的颜色标记出来
bmp.SetPixel(p.X, p.Y, Color.Blue);
}
///将bmp图像赋与pictureBox
pictureBox1.Image=bmp;
}