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; }
原文:http://www.cnblogs.com/hobe6699/p/5173516.html