使用GDI来绘制简易验证码

1.绘制验证码,首先绘制出上边的几个数字

 //首先是生成5个随机得的数字
            Random r = new Random();
            string str = null;
            for (int i = 0; i < 5; i++)
            {
                int rNumber = r.Next(0,10);
                str += rNumber;
            }

2.使用GDI来生成一个位图,然后将生成出来的字符串绘制到位图上

      //第二步  使用GDI来绘制图片
            Bitmap bmp = new Bitmap(200, 40);
            Graphics g =Graphics.FromImage(bmp);

            for (int i = 0; i < 5; i++)
            {
                Point p = new Point(i*30,0);
                string[] fonts = { "微软雅黑", "宋体","黑体","隶书","仿宋" };//设置验证码的字体
                Color[] colors = { Color.Yellow, Color.Blue ,Color.Black,Color.Red,Color.Green};
                g.DrawString(str[i].ToString(),new Font(fonts[r.Next(0,5)],25,FontStyle.Bold),new SolidBrush(colors[r.Next(0,5)]),p);//使用SolidBrush来生成画笔对象
            }

3.绘制出验证码上面的线

  //绘制验证码上面的线
            for(int i=0;i<20;i++)
            {
                Point p1 = new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
                Point p2 = new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
                g.DrawLine(new Pen(Color.Green),p1,p2);
            }

4.绘制出验证码上的点

            for (int i = 0; i < 500; i++)
            {
                Point p = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
                bmp.SetPixel(p.X, p.Y, Color.Black);
            }

最后再把生成的位图绑定到PIctureBoxl里面就可以啦!!!

          pictureBox1.Image = bmp;

效果图:

总结:使用Random来生成随机数,使用Bitmap来创建位图 ,使用Graphics来创建GDI对象,因为bmg继承至Image,所以在创建GDI对象的时候可以传入Bitmap类型的对象

使用DrawString方法来绘制字符串,因为字体和字体格式都需要随机,所以需要先创建一个字体数组(string类型)和一个颜色数组(Color类型),使用SolidBrush类来生成画笔,因为验证码上面的每一个数字的位置不能重叠到一起,所以需要设置他们的横坐标不能相同。

使用DrawLine来绘制线,使用bmp.SetPixel来绘制点

--------本文章是学习传播智客视频后写博客来记录知识,如果侵权,请联系删除!

猜你喜欢

转载自blog.csdn.net/qq_33407246/article/details/88627746