Winform GDI+

什麼是GDI+編程

GDI (Graphics Device Interface), 是屬於繪圖方面的 API (Application Programming Interface)。數組

由於應用程序不能直接控制硬件, 因此當咱們要進行繪圖的動做時, 必須透過 GDI 才能完成。dom

GDI+ (Graphics Device Interface) 是一種繪圖裝置接口, 可將應用程序和繪圖硬件分隔, 讓咱們可以編寫與裝置無關的應用程序。它可讓咱們不需注意特定顯示裝置的詳細數ide

據,即可在屏幕或打印機顯示信息。咱們能夠呼叫 GDI+ 類別所提供的方法, 而後這些方法會適當地呼叫特定的裝置驅動程序, 而完成繪圖。並且與.NET進行了更好的融合。函數

座標系統字體

在「GDI+」中所採用的座標系統,與平時人們較經常使用的座標系統不一樣,主要差異在於,通常的二維座標系,x軸與y軸分別是往右往上遞增(左圖),this

而「GDI+」所採用的座標系,x軸與y軸則分別是往右往下遞增(右圖)spa

圖形類所在的命名空間:code

各個命名空間的主要功能以下:orm

System.Drawing:提供了對 GDI+ 基本圖形功能的訪問的類;

System.Drawing.Imaging:提供高級 GDI+ 圖像處理功能的類;

System.Drawing.Text:提供高級 GDI+ 排版功能,該命名空間中的類容許用戶建立和使用多種字體的類。

Point 結構體

Point主要有x與y兩個屬性(表示在二維平面中定義點的整數x和y座標的有序對)。而且能夠對它進行「==」、「!=」等比較操做。

Point表示在二維平面中定義點的、x 和 y 座標的有序對

構造方法:

 Point pt = new Point(10,10);

 Point pt = new Point(new Size(10,10));

圖形編程中常見的類

Pen 畫筆類

  它主要指定線寬和線的模式。Pen對象繪製具備指定寬度和樣式的直線和曲線。由 Pen 對象繪製的直線可用各類填充模式(包括純色和紋理)填充。

填充模式取決於Brush畫刷或用做填充對象的紋理。

建立方法:

  分別能夠採用Brush、Color、及Brush、width和Color、width等參數來建立一個畫筆。

 Pen myPen=new Pen(Color.Black, 3); //建立一個3個像素寬的黑色畫筆

畫筆的做用:

  一般一個圖形輪廓(運用DrawXXX()方法)是用畫筆對象來實現的,

Graphics對象

     它採用面向對象的封裝機制,提供將對象(圖形或文本)繪製到設備(如屏幕或打印機)的方法。

這些對象是獨立於Graphics對象的,它們爲Graphics類中的圖形方法的參數。從而簡化了圖形編程。

處理圖形包括兩個步驟

1:建立 Graphics 對象。

2:使用 Graphics 對象繪製線條和形狀、呈現文本或顯示與操做圖像。

建立 Graphics 對象的各類方法

1:經過窗體或控件的 Paint 事件中 PaintEventArgs參數來獲取對Graphics 對象的引用。

2:調用某控件或窗體的 CreateGraphics 方法來獲取對 Graphics 對象的引用,該對象表示該控件或窗體的繪圖表面。若是想在已存在的窗體或控件上繪圖,則可以使用此方法。

Paint 事件處理程序中的 PaintEventArgs
  在爲控件編制 Paint 事件處理程序時,圖形對象做爲一個 PaintEventArgs 提供。所以能夠獲取對 Paint 事件的 PaintEventArgs 中 Graphics 對象的引用來實現繪圖,步驟:

1:聲明 Graphics 對象。

2:分配變量來引用做爲 PaintEventArgs 的一部分傳遞的 Graphics 對象。

3:插入代碼來繪製窗體或控件。

注:理解繪製過程當中的座標問題

CreateGraphics 方法

也可使用某控件或窗體的 CreateGraphics 方法來獲取對 Graphics 對象的引用,該對象表示該控件或窗體的繪圖表面。

1:用 CreateGraphics 方法建立 Graphics 對象

2:調用要在其上呈現圖形的窗體或控件的 CreateGraphics 方法。
 例如:
 Graphics g;
 g = this.CreateGraphics(); //建立出控件中的Graphics對象

Graphics類經常使用的畫圖方法

畫點

 DrawLine()畫線,參數爲兩個Point對象而且爲同一個點時。

 注:理解在窗體或控件中 的座標系問題

畫線

DrawLine()畫線---兩個Point對象

DrawLines()畫線段(Point的數組)

畫文本

DrawString()畫文本

畫矩形(填充矩形)

DrawRectangle()畫矩形

FillRectangle()填充矩形

圖形編程中經常使用的幾個結構

Rectangle和RectangleF結構體

  主要有左上角的x與y及width、height等四個屬性(存儲矩形區域的位置和大小)。而且能夠對它進行「==」、「!=」等比較操做。而RectangleF結構體表明浮點數類型。

主要的屬性以下:

Bottom:矩形底部的縱座標

Top:矩形頂部的縱座標

Left:矩形坐部的橫座標

Right:矩形右部的橫座

Height:矩形的高度

Width:矩形的寬度

Size:矩形的尺寸

IsEmpty:矩形是否爲空(高度和寬度是否都是0)

X:矩形左上角的橫座標

Y:矩形左上角的縱座標

Size和SizeF結構體:

  主要有width、height兩個屬性(用寬度和高度的有序對錶示矩形區域的大小)。SizeF結構體表明浮點數類型。而且能夠實現Size到Point、Size到SizeF的轉換。

構造函數:

 Size sz1 = new Size(10,10)

屬性:

 Width: 表示寬度值

 Height:表示高度值

Brush畫刷類

  做用:它主要指定填充區域的顏色和樣式, Brush對象是一個抽象類。閉合的圖形(例如,矩形或橢圓)由輪廓和內部組成,輪廓用畫筆繪製,內部用畫刷填充。

畫刷的風格:

實心畫刷(SolidBrush,用單一顏色填充)

畫刷的建立實例:

建立一個實心畫刷SolidBrush畫刷

 如:建立一個黑色的畫刷

 SolidBrush drawBrush=newSolidBrush(Color.Black);

 下面的示例用純紅色填充橢圓:

 SolidBrush mySolidBrush = new SolidBrush(Color.Red);

 myGraphics.FillEllipse(mySolidBrush, 0, 0, 60, 40);

Demo:生產簡單驗證碼

1:經過Random生成隨機數或字符及驗證碼

2:經過驗證碼內容長度生成指定大小的圖片

3:獲取生成圖片的Graphics對象

4:定義驗證碼字體格式

5:經過指定字體將驗證碼繪製到圖片

6:向圖片上添加背景噪音線

7:添加前景噪音點 

 1             Random r = new Random();
 2             string str = null;
 3             for (int i = 0; i < 5; i++)
 4             {
 5                 int rNumber = r.Next(0, 10);
 6                 str += rNumber;
 7             }
 8             //  MessageBox.Show(str);
 9             //建立GDI對象
10             Bitmap bmp = new Bitmap(150, 40);
11             Graphics g = Graphics.FromImage(bmp);
12 
13             for (int i = 0; i < 5; i++)
14             {
15                 Point p = new Point(i * 20, 0);
16                 string[] fonts = { "微軟雅黑", "宋體", "黑體", "隸書", "仿宋" };
17                 Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Green };
18                 g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);
19             }
20 
21             for (int i = 0; i < 20; i++)
22             {
23                 Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
24                 Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
25                 g.DrawLine(new Pen(Brushes.Green), p1, p2);
26             }
27 
28             for (int i = 0; i < 500; i++)
29             {
30                 Point p = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
31                 bmp.SetPixel(p.X, p.Y, Color.Black);
32             }
33 
34 
35             //將圖片鑲嵌到PictureBox中
36             pictureBox1.Image = bmp;
Winform GDI 驗證碼

開發環境:Visual Studio 2010

源代碼: 連接:http://pan.baidu.com/s/1jGgzXJo  密碼:5d6a

相關文章
相關標籤/搜索