C# 实现验证码

这篇博客详细介绍了如何在Windows Forms应用程序中生成验证码。通过创建位图、使用GDI+绘图、添加随机数字和字体样式、绘制干扰线和点来实现。代码示例展示了如何在按钮点击事件中生成并显示验证码图像。
摘要由CSDN通过智能技术生成

 这是在winform窗体中绘制的,点击button会在指定的区域显示验证码watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qGC5Lqt5Lqt,size_20,color_FFFFFF,t_70,g_se,x_16

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂亭亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值