学习笔记:利用GDI+生成简单的验证码图片
class="code_img_closed" src="/Upload/Images/2015010323/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('75a94085-99d5-429d-9535-b0c154aaec2a',event)" src="/Upload/Images/2015010323/2B1B950FA3DF188F.gif" alt="" />1 /// <summary> 2 /// 单击图片时切换图片 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void pictureBox1_Click(object sender, EventArgs e) 7 { 8 Random r = new Random(); 9 string str = string.Empty; 10 //生成5位随机数如 90531 11 for (int i = 0; i < 5; i++) 12 { 13 str += r.Next(0, 10); 14 } 15 Bitmap bitmap = new Bitmap(150, 40); 16 Graphics g = Graphics.FromImage(bitmap); 17 //预定义几种字体样式和颜色 18 string[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" }; 19 Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Orange }; 20 //因为每一数字的字体和颜色可能不同, 21 //因此循环将生成的随机数每一数字绘制到图片 22 for (int i = 0; i < str.Length; i++) 23 { 24 Point p = new Point(i * 30, 0); 25 g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p); 26 } 27 //循环在图片范围内绘制出50条线 28 for (int i = 0; i < 50; i++) 29 { 30 //保证线的起始点都在图片范围内 31 Point p1 = new Point(r.Next(0, bitmap.Width), r.Next(0, bitmap.Height)); 32 Point p2 = new Point(r.Next(0, bitmap.Width), r.Next(0, bitmap.Height)); 33 g.DrawLine(new Pen(Brushes.Green), p1, p2); 34 } 35 //添加一些像素点 36 for (int i = 0; i < 300; i++) 37 { 38 Point p1 = new Point(r.Next(0, bitmap.Width), r.Next(0, bitmap.Height)); 39 bitmap.SetPixel(p1.X, p1.Y, Color.Green); 40 } 41 //在winForm中用PictureBox中显示出来 42 pictureBox1.Image = bitmap; 43 }View Code
最终效果如下