什么是GDI+
GDI (Graphics Device Interface), 是屬于繪圖方面的 API (Application Programming Interface)。
因為應用程序不能直接控制硬件, 所以當我們要進行繪圖的動作時, 必須透過 GDI 才能完成。
GDI+ (Graphics Device Interface) 是一種繪圖裝置接口, 可將應用程序和繪圖硬件分隔, 讓我們能夠編寫與裝置無關的應用程序。它可以讓我們不需注意特定顯示裝置的詳細數
據,便可在屏幕或打印機顯示信息。我們可以呼叫 GDI+ 類別所提供的方法, 然后這些方法會適當地呼叫特定的裝置驅動程序, 而完成繪圖。而且與.NET進行了更好的融合。
winform wpf、坐標系統
在「GDI+」中所采用的坐標系統,與平時人們較常用的坐標系統不同,主要差別在于,一般的二維坐標系,x軸與y軸分別是往右往上遞增(左圖),
而「GDI+」所采用的坐標系,x軸與y軸則分別是往右往下遞增(右圖)
圖形類所在的命名空間:
各個命名空間的主要功能如下:
winform mvc。System.Drawing:提供了對 GDI+ 基本圖形功能的訪問的類;
System.Drawing.Imaging:提供高級 GDI+ 圖像處理功能的類;
System.Drawing.Text:提供高級 GDI+ 排版功能,該命名空間中的類允許用戶創建和使用多種字體的類。
Point 結構體
Point主要有x與y兩個屬性(表示在二維平面中定義點的整數x和y坐標的有序對)。并且可以對它進行“==”、“!=”等比較操作。
Point表示在二維平面中定義點的、x 和 y 坐標的有序對
winform嵌入chrome,構造方法:
?Point pt = new Point(10,10);
?Point pt = new Point(new Size(10,10));
圖形編程中常見的類
Pen 畫筆類
??它主要指定線寬和線的模式。Pen對象繪制具有指定寬度和樣式的直線和曲線。由 Pen 對象繪制的直線可用各種填充模式(包括純色和紋理)填充。
WinForm、填充模式取決于Brush畫刷或用作填充對象的紋理。
創建方法:
??分別可以采用Brush、Color、及Brush、width和Color、width等參數來創建一個畫筆。
?Pen myPen=new Pen(Color.Black, 3); //創建一個3個像素寬的黑色畫筆
畫筆的作用:
??通常一個圖形輪廓(運用DrawXXX()方法)是用畫筆對象來實現的,
vscode gdb,Graphics對象
???? 它采用面向對象的封裝機制,提供將對象(圖形或文本)繪制到設備(如屏幕或打印機)的方法。
這些對象是獨立于Graphics對象的,它們為Graphics類中的圖形方法的參數。從而簡化了圖形編程。
處理圖形包括兩個步驟
1:創建 Graphics 對象。
2:使用 Graphics 對象繪制線條和形狀、呈現文本或顯示與操作圖像。
gdi+window。創建 Graphics 對象的各種方法
1:通過窗體或控件的 Paint 事件中 PaintEventArgs參數來獲取對Graphics 對象的引用。
2:調用某控件或窗體的 CreateGraphics 方法來獲取對 Graphics 對象的引用,該對象表示該控件或窗體的繪圖表面。如果想在已存在的窗體或控件上繪圖,則可使用此方法。
Paint 事件處理程序中的 PaintEventArgs
??在為控件編制 Paint 事件處理程序時,圖形對象作為一個 PaintEventArgs 提供。因此可以獲取對 Paint 事件的 PaintEventArgs 中 Graphics 對象的引用來實現繪圖,步驟:
1:聲明 Graphics 對象。
2:分配變量來引用作為 PaintEventArgs 的一部分傳遞的 Graphics 對象。
visual gdb,3:插入代碼來繪制窗體或控件。
注:理解繪制過程中的坐標問題
CreateGraphics 方法
也可以使用某控件或窗體的 CreateGraphics 方法來獲取對 Graphics 對象的引用,該對象表示該控件或窗體的繪圖表面。
1:用 CreateGraphics 方法創建 Graphics 對象
2:調用要在其上呈現圖形的窗體或控件的 CreateGraphics 方法。
?例如:
?Graphics g;
?g = this.CreateGraphics();?//創建出控件中的Graphics對象
winform webapi?Graphics類常用的畫圖方法
畫點
?DrawLine()畫線,參數為兩個Point對象并且為同一個點時。
?注:理解在窗體或控件中 的坐標系問題
畫線
DrawLine()畫線---兩個Point對象
winform datagridview。DrawLines()畫線段(Point的數組)
畫文本
DrawString()畫文本
畫矩形(填充矩形)
DrawRectangle()畫矩形
FillRectangle()填充矩形
winform ui。圖形編程中常用的幾個結構
Rectangle和RectangleF結構體
??主要有左上角的x與y及width、height等四個屬性(存儲矩形區域的位置和大小)。并且可以對它進行“==”、“!=”等比較操作。而RectangleF結構體代表浮點數類型。
主要的屬性如下:
Bottom:矩形底部的縱座標
Top:矩形頂部的縱座標
wpf winform、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;
開發環境:Visual Studio 2010
源代碼: 鏈接:http://pan.baidu.com/s/1jGgzXJo? 密碼:5d6a