这是在winform窗体中绘制的,点击button会在指定的区域显示验证码
private void button1_Click(object sender, EventArgs e) { Bitmap bitmap = new Bitmap(100, 30); //产生位图,在位图上绘制 Graphics graphics = Graphics.FromImage(bitmap); //使用GDI+绘图 Random random = new Random(); //产生随机数 string str = ""; //定义字符串用于存放数字字符串 for (int a = 0; a < 4; a++)//产生4个随机数字符串 { str += random.Next(0, 10);//产生个位随机数字,连接各个随机数 } string[] fonts = {"宋体","楷体","黑体","微软雅黑" };//定义字体数组存字体 Color[] color = {Color.Red,Color.Black,Color.Green,Color.Yellow,Color.White,Color.Orange};//定义Color数组 for (int a = 0; a < 4; a++) { Point point = new Point(20 * a,0) ;//定义一个起始点坐标 graphics.DrawString(str[a].ToString(), new Font(fonts[random.Next(0,4)],17,FontStyle.Bold),new SolidBrush(color[random.Next(0,6)]),point); //注:new Color()不能重载故用new SolidBrush代替 // DrawString的参数信息(string s, Font font, Brush brush, PointF point) //几个为什么 //1 为什么第1个参数要加上点ToString括号? //答:数组中的每一个元素是字符(char类型),但是这边需要string类型的所以需要进行类型转换 //2 Point中为什么要指定(20*a,0)? //答:因为每循环一次打印出一个字符数字,所以其起始点坐标必须改变 //否则会使字符重叠,看不清,20为第1个点到第2个点的像素,大小可根据需要调整 // } for (int a = 0; a < 20; a++) //绘制线干扰项 { Pen pen = new Pen(Color.Orange);//新建一个画笔 Point point1 = new Point(random.Next(0,bitmap.Width),random.Next(0,bitmap.Height));//注意不能超过边际 Point point2 = new Point(random.Next(0, bitmap.Width), random.Next(0, bitmap.Height)); graphics.DrawLine(pen,point1,point2); } for (int a = 0; a < 20; a++) { //添加点干扰项 bitmap.SetPixel(random.Next(0,bitmap.Width),random.Next(0,bitmap.Height),Color.Blue); } pictureBox1.Image=bitmap; }