数字验证码

        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;
        }

 

posted @ 2016-01-31 17:02  hobe6699  阅读(205)  评论(0编辑  收藏  举报