學習筆記:利用GDI+生成簡單的驗證碼圖片
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 最終效果如下