點擊更換驗証碼
- 畫圖片 Picture Box
- 隨機數字 Random
Steps:
- 產生隨機數
- 畫隨機碼數字
- 通過循環,將隨機數一個一個畫在圖片上(將隨機數字放到圖片上)
- 畫的時候,每個數字要有水平間隔
- 在畫字串時,字體、顏色都要隨機的給
- 畫線條掩飾
- 畫線的時候,要符合圖片的大小,不能超過
- 給圖片畫顆粒
- 畫顆粒的時候,要符合圖片的大小,不能超過
- 將圖片嵌入到PictureBox裡
繪製驗証碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
namespace 使用GDI繪製驗証碼
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 點擊更換驗証碼
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_Click(object sender, EventArgs e)
{
//創建產生隨機數的物件
Random r = new Random();
//產生4個隨機字串
string? str = null;
for (int i = 0; i < 5; i++)
{
str += r.Next(0, 10);//0-9
}
//畫圖片(要畫圖就要產生GDI物件)
//創建GDI物件
Bitmap bmp = new Bitmap(150, 50); //所有圖片在默認情況下,都是bitmap點陣圖
Graphics g = Graphics.FromImage(bmp);
//畫數字-把產生的字串放到bmp圖片上
for (int i = 0; i < 5; i++)
{
//定義隨機的字體和顏色
string[] fonts = { "微軟雅體", "宋體", "黑體", "仿宋", "細明" };
Color[] colors = { Color.Red, Color.Black, Color.Blue, Color.Green, Color.Gray };
//畫文本
Point point = new Point(i * 20, 0);//x=i*10要給每個數有間距,y=0代表在同一個水平上
g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 5)], 15, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), point);
}
//畫線畫點
for (int i = 0; i < 20; i++)
{
//點不能超過Bitmap範圍
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(Brushes.Green), p1, p2);
}
//畫顆粒-圖片給點像素(給點)
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);
}
//圖片嵌入PictureBox中
pictureBox1.Image = bmp;
}
}
}