1. 程式人生 > >.NET GDI+圖形影象程式設計教程

.NET GDI+圖形影象程式設計教程

GDI+繪圖基礎

編寫圖形程式時需要使用GDI(Graphics Device Interface,圖形裝置介面)。

從程式設計的角度看,GDI包括兩部分:GDI物件和GDI函式。GDI物件定義了GDI函式使用的工具和環境變數;而GDI函式使用GDI物件繪製各種圖形。

在C#中,進行圖形程式編寫時用到的是GDI+(Graphics Device Interface Plus,圖形裝置介面)版本,GDI+是GDI的進一步擴充套件,它使我們程式設計更加方便。

1 GDI+概述

GDI+是微軟在Windows 2000以後作業系統中提供的新的圖形裝置介面,其通過一套部署為託管程式碼的類來實現,這套類被稱為GDI+的“託管類介面”。

GDI+主要提供了一下三類服務:

1.二維向量圖形:GDI+提供了儲存圖形基元自身資訊的類(或結構體)、儲存圖形基元繪製方式資訊的類以及實際進行繪製的類。

2.影象處理:大多數圖片都難以劃定為直線和曲線的集合,無法使用二維向量圖形方式進行處理。因此,GDI+為我們提供了Bitmap、Image等類,它們可用於顯示、操作和奧村BMP、JPG、GIF等影象格式。

3.文字顯示:GDI+支援使用各種字型、字號和樣式來顯示文字。

我們要進行圖形程式設計,就必須先講解Graphics類,同時我們還必須掌握Pen、Brush和Rectangle這幾種類。

GDI+比GDI優越主要表現在兩個方面:

1.GDI+通過提供新功能(例如:漸變畫筆和Alpha混合)擴充套件了GDI的功能;

2.修訂了程式設計模型,是圖形程式設計更加簡易靈活。

2 Graphics類

Graphics類封裝一個GDI+繪圖圖面,提供將物件繪製到現實裝置的方法,Graphics與特定的裝置上下文關聯。

畫圖方法都被包括在Graphics類中國,在畫任何物件(例如:Circle Rectangle)時,我們首先要建立一個Graphics類例項,這個例項相當於建立了一塊畫布,有了畫布才可以用各種畫圖方法進行繪圖。

繪圖程式的設計過程一般分為兩個步驟:1.建立Graphics;2.使用Graphics物件的方法繪圖、顯示文字或處理影象。

通常我們使用下述三種方法來建立一個Graphics物件:

方法一:利用控制元件或窗體的Paint事件中的PaintEventArgs

在窗體或控制元件的Paint事件中接受對圖形物件的引用,作為PaintEventArgs(PaintEventArgs指定繪製控制元件所用的Graphics)的一部分,在為控制元件建立繪製程式碼時,通常會使用此方法來獲取對圖形物件的引用。例如:

建立Graphics物件的兩種方法

 
  1. // 窗體的Paint事件的響應方法 
  2. private void Frm_Demo_Paint(object sender, PaintEventArgs e) 
  3.     Graphics _Graphics = e.Graphics; 
  4.  
  5. // 也可以直接過載控制元件或窗體的OnPaint方法 
  6. protected override void OnPaint(PaintEventArgs e) 
  7.     Graphics _Graphics = e.Graphics; 
  8.  
  9. 建立Graphics物件的兩種方法 

Paint事件在重繪控制元件時發生。

方法二:呼叫某控制元件或窗體的CreateGraphics方法

呼叫某控制元件或窗體的CreateGraphics方法以獲取對Graphics物件的引用,該物件表示該控制元件或窗體的繪圖圖面。

如果想在已存在的窗體或控制元件上繪圖,通常會使用此方法,例如:

 
  1. 1 Graphics _Graphics = this.CreateGraphics();    // 在當前窗體上建立Graphics物件 

方法三:呼叫Graphics類的FromImage靜態方法

由從Image整合的任何物件建立Graphics物件。在需要更改已存在的影象時,通常會使用此方法。例如:

使用Graphics.FromImage()方法 建立Graphics物件

 
  1. Image img = Image.FromFile("孤影.jpg");   // 建立Image物件 
  2. Graphics _Graphics = Graphics.FromImage(img);   // 建立Graphics物件 

2.1 Graphics類的方法成員

有了一個Graphics的物件引用後,就可以利用該物件的成員進行各種各樣圖形的繪製,下面表格列出了Graphics類的常用方法成員:

Graphics類常用方法成員
名稱 說明 名稱 說明
DrawArc 畫弧 DrawBezier 畫立體的貝爾塞曲線
DrawBeziers 畫連續立體的貝爾塞曲線 DrawClosedCurve 畫閉合曲線
DrawCurve 畫曲線 DrawEllipse 畫橢圓
DrawImage 畫影象 DrawLine 畫線
DrawPath 通過路徑畫線和曲線 DrawPie 畫餅形
DrawPolygon 畫多邊形 DrawRectangle 畫矩形
DrawString 繪製文字 FillEllipse 填充橢圓
FillPath 填充路徑 FillPie 填充餅圖
FillPolygon 填充多邊形 FillRectangle 填充矩形
FillRectangles 填充矩形組 FillRegion 填充區域

在.NET中,GDI+的所有繪圖功能都包括在System、System.Drawimg、System.Drawimg.Imaging、System.Drawimg.Drawimg2D和System.Drawimg.Text等名稱空間中,因此開始用GDI+類之前,需要先引用相應的名稱空間。

2.2 引用名稱空間

在C#應用程式中使用using命令引用給定的名稱空間或類,下面是一個C#應用程式引用名稱空間的例子:

引用名稱空間

 
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Data; 
  4. using System.ComponentModel; 
  5. using System.Drawing; 
  6. using System.Drawing.Drawing2D; 
  7. using System.Drawing.Imaging; 
  8.  
  9. 引用名稱空間 

 

3 常用畫圖物件

在建立了Graphics物件後,就可以用它開始繪圖了,可以畫線、填充圖形、顯示文字等等,其中主要用到的物件還有:

Pen:用來用patterns、colors或者bitmaps進行填充

Color:用來畫線和多邊形,包括矩形、圓和餅形

Font:用來給文字設定字型格式

Brush:用來描述顏色

Rectangle:矩形結構通常用來在窗體上畫矩形

Point:描述一對有序的x,y兩個座標值

3.1 Pen類

Pen類用來繪製指定寬度和樣式的直線。使用DashStyle屬性繪製幾種虛線,可以使用各種各樣填充樣式(包括純色和紋理)來填充Pen繪製的直線,填充模式取決於畫筆或用作填充物件的紋理。

使用畫筆時,需要先例項化一個畫筆物件,主要有以下幾種方法:

例項化畫筆物件

 
  1. // 用指定的顏色例項化一隻畫筆 
  2. public Pen(Color); 
  3.  
  4. // 用指定的畫刷例項化一隻畫筆 
  5. public Pen(Brush); 
  6.  
  7. // 用指定的畫刷和寬度例項化一隻畫筆 
  8. public Pen(Brush, float); 
  9.  
  10. // 用指定的顏色和寬度例項化一隻畫筆 
  11. public Pen(Color, float); 
  12.  
  13. // 例項化畫筆格式如下: 
  14. Pen pen = new Pen(Color.Blue); 
  15. // 或者: 
  16. Pen pen = new Pen(Color.Blue, 100); 
  17.  
  18. 例項化畫筆物件 

Pen常用的屬性如下:

Pen常用屬性
名稱 說明 名稱 說明
Alignment 獲得或者設定畫筆的對齊方式 Brush 獲得或者設定畫筆的屬性
Color 獲得或者設定畫筆的顏色 Width 獲得或者設定畫筆的寬度

3.2 Color結構

在自然界中,顏色大都由透明度(A)和三基色(R,G,B)所組成。在GDI+中,通過Color結構封裝對顏色的定義,Color結構中,除了提供(A,R,G,B)以外,還提供許多系統定義的顏色,如Pink(粉色)。另外,還提供許多靜態成員,使用者對顏色進行操作。

Color結構的基本屬性如下表:

顏色的基本屬性
名稱 說明
A 獲取此Color結構的Alpha分量值,取值(0~255)
R 獲取此Color結構的紅色分量值,取值(0~255)
G 獲取此Color結構的綠色分量值,取值(0~255)
B 獲取此Color結構的藍色分量值,取值(0~255)
Name

獲取此Color結構的名稱,這將返回使用者定義的顏色的名稱或已知顏色的名稱(如果該顏色是從某個名稱建立的)。

對於自定義的顏色,這將返回RGB值。

Color結構的基本(靜態)方法如下表:

顏色的基本方法
名稱 說明
FromArgb 從四個8位的ARGB分量(Alpha、紅色、綠色和藍色)值建立Color結構
FromKnowColor 從指定餓預定義顏色建立一個Color結構
FromName 從預定義顏色的指定名稱建立一個Color結構。

Color結構變數可以通過已有顏色構造,也可以通過RGB建立,例如:

建立Color構造物件

 
  1. Color color1 = Color.FromArgb(96, 06, 25); 
  2. Color color2 = Color.FromKnownColor(KnownColor.Blue);   // KnowColor為列舉型別 
  3. Color color3 = Color.FromName("LightBlue"); 

在影象處理中一般需要獲取或設定畫素的顏色值,獲取一幅影象的某個畫素顏色值得具體步驟如下:

1.定義Bitmap

 
  1. Bitmap bitmap = new Bitmap("D:\\孤影\\LonelyShadow.bmp");  

2.定義一個顏色變數,把在指定位置所取得的畫素值存入顏色變數中

 
  1. Color color = new Color(); 
  2. color = bitmap.GetPixel(10, 10); // 獲取此Bitmap中指定畫素的顏色 

3.將顏色值分解出單色分量值

 
  1. int r, g, b; 
  2. r = color.R; 
  3. g = color.G; 
  4. b = color.B; 

3.3 Font類

Font類定義特定文字格式,包括字型、字號和字形屬性。Font類的常用建構函式是:

public Font(string 字型名, float 字號, FontStyle 字形){} 其中字號和字型為可選項

public Font(string 字型名, float 字號) 其中字型名為Font的FontFamily的字串表示形式

下面是定義一個F哦你團隊相愛難過的示例程式碼:

 
  1. FontFamily fontFamily = new FontFamily("Arial"); 
  2. Font font = new Font(fontFamily, 16, FontStyle.Regular, GraphicsUnit.Pixel); 

字型常用屬性如下表:

字型的常用屬性
名稱 說明 名稱 說明
Bold 是否為粗體 FontFamily 字型成員
Height 字型高 Italic 是否為斜體
Name 字型名稱 Size 字型尺寸
SizeInPoints 獲取此Font物件的字號,以磅為單位 Strikeout 是否有刪除線
Style 字型型別 Underline Unit
Unit 字型尺寸單位    

3.4 Brush類

Brush類是一個抽象的基類,因此它不能被例項化,我們總是用它的派生類進行例項化一個畫刷的物件,當我們對圖形內部進行填充操作時就會用到畫刷,關於畫刷在 [1.5] 中有詳細的講解。

3.5 Rectangle結構

儲存一組整數,共四個,表示一個矩形的位置和大小。

矩形結構通常用來在窗體上畫矩形,除了利用它的建構函式矩形物件外,還可以利用Rectangle結構的屬性成員,其屬性成員如下表:

Rectangle結構屬性
名稱 說明 名稱 索命
Bottom 底端座標 Height 矩形高
IsEmpty 測試矩形寬和高是否為0 Left 矩形左邊座標
Location 矩形的位置 Right 矩形右邊座標
Size 矩形尺寸 Top 矩形頂端座標
Width 矩形寬 X 矩形左上角頂點X座標
Y 矩形左上角頂點Y座標    

Rectangle結構的建構函式有以下兩個:

Rectangle結構的建構函式

 
  1. // 用指定的位置和大小初始化Rectangle類的新例項 
  2. public Rectangle(Point, Size);  // Size結構儲存一個有序整數對,通常為矩形的寬度和高度 
  3. public Rectangle(int, int, int, int); 

1.3.6 Point結構

用指定座標初始化Point類的新例項,這個結構很像C++的Point結構,它描述了一對有序的x,y兩個座標值,其建構函式為:

public Point(int x, int y); 其中x為該點的水平位置;y為該點的垂直位置。

下面是構造Point物件的示例程式碼:

 
  1. Point pt1 = new Point(30, 30); 
  2. Point pt2 = new Point(110, 110); 

 

4 基本圖形繪製舉例

4.1 畫一個矩形

建一個C#.NET WinForms窗體應用程式,通過在窗體的OnPaint事件中繪製一個填充的漸變矩形:

填充矩形方法FillRectangle()的語法幫助定義如下:

填充矩形的方法FillRectangle() 語法定義

 
  1. // 
  2.         // 摘要:  
  3.         //     填充 System.Drawing.Rectangle 結構指定的矩形的內部。 
  4.         // 
  5.         // 引數:  
  6.         //   brush: 
  7.         //     確定填充特性的 System.Drawing.Brush。 
  8.         // 
  9.         //   rect: 
  10.         //     System.Drawing.Rectangle 結構,它表示要填充的矩形。 
  11.         // 
  12.         // 異常:  
  13.         //   System.ArgumentNullException: 
  14.         //     brush 為 null。 
  15.         public void FillRectangle(Brush brush, Rectangle rect); 
  16.         // 
  17.         // 摘要:  
  18.         //     填充 System.Drawing.RectangleF 結構指定的矩形的內部。 
  19.         // 
  20.         // 引數:  
  21.         //   brush: 
  22.         //     確定填充特性的 System.Drawing.Brush。 
  23.         // 
  24.         //   rect: 
  25.         //     System.Drawing.RectangleF 結構,它表示要填充的矩形。 
  26.         // 
  27.         // 異常:  
  28.         //   System.ArgumentNullException: 
  29.         //     brush 為 null。 
  30.         public void FillRectangle(Brush brush, RectangleF rect); 
  31.         // 
  32.         // 摘要:  
  33.         //     填充由一對座標、一個寬度和一個高度指定的矩形的內部。 
  34.         // 
  35.         // 引數:  
  36.         //   brush: 
  37.         //     確定填充特性的 System.Drawing.Brush。 
  38.         // 
  39.         //   x: 
  40.         //     要填充的矩形的左上角的 x 座標。 
  41.         // 
  42.         //   y: 
  43.         //     要填充的矩形的左上角的 y 座標。 
  44.         // 
  45.         //   width: 
  46.         //     要填充的矩形的寬度。 
  47.         // 
  48.         //   height: 
  49.         //     要填充的矩形的高度。 
  50.         // 
  51.         // 異常:  
  52.         //   System.ArgumentNullException: 
  53.         //     brush 為 null。 
  54.         public void FillRectangle(Brush brush, float x, float y, float width, float height); 
  55.         // 
  56.         // 摘要:  
  57.         //     填充由一對座標、一個寬度和一個高度指定的矩形的內部。 
  58.         // 
  59.         // 引數:  
  60.         //   brush: 
  61.         //     確定填充特性的 System.Drawing.Brush。 
  62.         // 
  63.         //   x: 
  64.         //     要填充的矩形的左上角的 x 座標。 
  65.         // 
  66.         //   y: 
  67.         //     要填充的矩形的左上角的 y 座標。 
  68.         // 
  69.         //   width: 
  70.         //     要填充的矩形的寬度。 
  71.         // 
  72.         //   height: 
  73.         //     要填充的矩形的高度。 
  74.         // 
  75.         // 異常:  
  76.         //   System.ArgumentNullException: 
  77.         //     brush 為 null。 
  78.         public void FillRectangle(Brush brush, int x, int y, int width, int height); 
  79.  
  80. 填充矩形的方法FillRectangle() 語法定義 

我們在這裡只使用第一種定義,演示填充矩形,示例程式碼如下:

畫一個顏色漸變的矩形

 
  1. /// <summary> 
  2.         /// 窗體的Paint事件的響應方法 
  3.         /// </summary> 
  4.         /// <param name="sender">當前事件觸發者(當前窗體)</param> 
  5.         /// <param name="e">附帶的事件引數</param> 
  6.         private void Frm_Demo_Paint(object sender, PaintEventArgs e) 
  7.         { 
  8.             Graphics g = e.Graphics;    // 建立當前窗體的Graphics物件 
  9.             Rectangle rect = new Rectangle(50, 30, 100, 100);   // 建立一個矩形(x,y,width,height) 
  10.             // 建立線性漸變畫刷(畫刷界限, 起始顏色, 結束顏色, 漸變角度) 
  11.             LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Purple, Color.LightBlue, LinearGradientMode.BackwardDiagonal); 
  12.             g.FillRectangle(lBrush, rect);  // 走起~ 
  13.         } 
  14.  
  15. 畫一個顏色漸變的矩形 

上述程式碼執行效果如下: 

4.2 畫一個弧

畫弧線的語法定義如下:

畫弧線方法DrawArc()的定義

 
  1. // 
  2.         // 摘要:  
  3.         //     繪製一段弧線,它表示 System.Drawing.Rectangle 結構指定的橢圓的一部分。 
  4.         // 
  5.         // 引數:  
  6.         //   pen: 
  7.         //     System.Drawing.Pen,它確定弧線的顏色、寬度和樣式。 
  8.         // 
  9.         //   rect: 
  10.         //     System.Drawing.RectangleF 結構,它定義橢圓的邊界。 
  11.         // 
  12.         //   startAngle: 
  13.         //     從 x 軸到弧線的起始點沿順時針方向度量的角(以度為單位)。 
  14.         // 
  15.         //   sweepAngle: 
  16.         //     從 startAngle 引數到弧線的結束點沿順時針方向度量的角(以度為單位)。 
  17.         // 
  18.         // 異常:  
  19.         //   System.ArgumentNullException: 
  20.         //     pen 為 null。 
  21.         public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle); 
  22.  
  23. 畫弧線方法DrawArc()的定義 

參照定義的幫助,可寫出如下畫弧線的程式碼:

畫弧線示例程式碼

 
  1. /// <summary> 
  2.         /// 窗體的Paint事件的響應方法 
  3.         /// </summary> 
  4.         /// <param name="sender">當前事件觸發者(當前窗體)</param> 
  5.         /// <param name="e">附帶的事件引數</param> 
  6.         private void Frm_Demo_Paint(object sender, PaintEventArgs e) 
  7.         { 
  8.             Graphics graphics = e.Graphics; 
  9.             Pen pen = new Pen(Color.Blue); 
  10.             Rectangle rect = new Rectangle(50,50,200,100); 
  11.             graphics.DrawArc(pen, rect, 12, 84); 
  12.         } 
  13.  
  14. 畫弧線示例程式碼 

上述程式碼執行結果如下:

4.3 畫線

畫線DrawLine()方法的語法定義如下:

DrawLine()語法定義

 
  1. // 
  2.         // 摘要:  
  3.         //     繪製一條連線兩個 System.Drawing.Point 結構的線。 
  4.         // 
  5.         // 引數:  
  6.         //   pen: 
  7.         //     System.Drawing.Pen,它確定線條的顏色、寬度和樣式。 
  8.         // 
  9.         //   pt1: 
  10.         //     System.Drawing.Point 結構,它表示要連線的第一個點。 
  11.         // 
  12.         //   pt2: 
  13.         //     System.Drawing.Point 結構,它表示要連線的第二個點。 
  14.         // 
  15.         // 異常:  
  16.         //   System.ArgumentNullException: 
  17.         //     pen 為 null。 
  18.         public void DrawLine(Pen pen, Point pt1, Point pt2); 
  19.         // 
  20.         // 摘要:  
  21.         //     繪製一條連線兩個 System.Drawing.PointF 結構的線。 
  22.         // 
  23.         // 引數:  
  24.         //   pen: 
  25.         //     System.Drawing.Pen,它確定線條的顏色、寬度和樣式。 
  26.         // 
  27.         //   pt1: 
  28.         //     System.Drawing.PointF 結構,它表示要連線的第一個點。 
  29.         // 
  30.         //   pt2: 
  31.         //     System.Drawing.PointF 結構,它表示要連線的第二個點。 
  32.         // 
  33.         // 異常:  
  34.         //   System.ArgumentNullException: 
  35.         //     pen 為 null。 
  36.         public void DrawLine(Pen pen, PointF pt1, PointF pt2); 
  37.         // 
  38.         // 摘要:  
  39.         //     繪製一條連線由座標對指定的兩個點的線條。 
  40.         // 
  41.         // 引數:  
  42.         //   pen: 
  43.         //     System.Drawing.Pen,它確定線條的顏色、寬度和樣式。 
  44.         // 
  45.         //   x1: 
  46.         //     第一個點的 x 座標。 
  47.         // 
  48.         //   y1: 
  49.         //     第一個點的 y 座標。 
  50.         // 
  51.         //   x2: 
  52.         //     第二個點的 x 座標。 
  53.         // 
  54.         //   y2: 
  55.         //     第二個點的 y 座標。 
  56.         // 
  57.         // 異常:  
  58.         //   System.ArgumentNullException: 
  59.         //     pen 為 null。 
  60.         public void DrawLine(Pen pen, float x1, float y1, float x2, float y2); 
  61.         // 
  62.         // 摘要:  
  63.         //     繪製一條連線由座標對指定的兩個點的線條。 
  64.         // 
  65.         // 引數:  
  66.         //   pen: 
  67.         //     System.Drawing.Pen,它確定線條的顏色、寬度和樣式。 
  68.         // 
  69.         //   x1: 
  70.         //     第一個點的 x 座標。 
  71.         // 
  72.         //   y1: 
  73.         //     第一個點的 y 座標。 
  74.         // 
  75.         //   x2: 
  76.         //     第二個點的 x 座標。 
  77.         // 
  78.         //   y2: 
  79.         //     第二個點的 y 座標。 
  80.         // 
  81.         // 異常:  
  82.         //   System.ArgumentNullException: 
  83.         //     pen 為 null。 
  84.         public void DrawLine(Pen pen, int x1, int y1, int x2, int y2); 
  85.  
  86. DrawLine()語法定義 

根據定義的幫助,我們以第一種語法 可以寫出如下示例程式碼:

畫線DrawLine()函式示例程式碼

 
  1. /// <summary> 
  2.         /// 窗體的Paint事件的響應方法 
  3.         /// </summary> 
  4.         /// <param name="sender">當前事件觸發者(當前窗體)</param> 
  5.         /// <param name="e">附帶的事件引數</param> 
  6.         private void Frm_Demo_Paint(object sender, PaintEventArgs e) 
  7.         { 
  8.             Graphics graphics = e.Graphics; // 建立當前窗體的Graphics物件 
  9.             Pen pen = new Pen(Color.Blue);  // 建立藍色畫筆物件 
  10.             Point pointStart = new Point(30, 30);   // 建立起始點 
  11.             Point pointEnd = new Point(150, 150);   // 建立結束點 
  12.             graphics.DrawLine(pen, pointStart, pointEnd);   // 畫線 
  13.         } 
  14.  
  15. 畫線DrawLine()函式示例程式碼 

上述程式碼執行效果圖如下:

4.4 畫橢圓

還是先看一下DrawEllipse()畫橢圓的語法定義:

畫橢圓方法 DrawEllipse()語法定義

 
  1. // 
  2.         // 摘要:  
  3.         //     繪製邊界 System.Drawing.Rectangle 結構指定的橢圓。 
  4.         // 
  5.         // 引數:  
  6.         //   pen: 
  7.         //     System.Drawing.Pen,它確定曲線的顏色、寬度和樣式。 
  8.         // 
  9.         //   rect: 
  10.         //     System.Drawing.Rectangle 結構,它定義橢圓的邊界。 
  11.         // 
  12.         // 異常:  
  13.         //   System.ArgumentNullException: 
  14.         //     pen 為 null。 
  15.         public void DrawEllipse(Pen pen, Rectangle rect); 
  16.         // 
  17.         // 摘要:  
  18.         //     繪製邊界 System.Drawing.RectangleF 定義的橢圓。 
  19.         // 
  20.         // 引數:  
  21.         //   pen: 
  22.         //     System.Drawing.Pen,它確定曲線的顏色、寬度和樣式。 
  23.         // 
  24.         //   rect: 
  25.         //     System.Drawing.RectangleF 結構,它定義橢圓的邊界。 
  26.         // 
  27.         // 異常:  
  28.         //   System.ArgumentNullException: 
  29.         //     pen 為 null。 
  30.         public void DrawEllipse(Pen pen, RectangleF rect); 
  31.         // 
  32.         // 摘要:  
  33.         //     繪製一個由邊框(該邊框由一對座標、高度和寬度指定)定義的橢圓。 
  34.         // 
  35.         // 引數:  
  36.         //   pen: 
  37.         //     System.Drawing.Pen,它確定曲線的顏色、寬度和樣式。 
  38.         // 
  39.         //   x: 
  40.         //     定義橢圓的邊框的左上角的 X 座標。 
  41.         // 
  42.         //   y: 
  43.         //     定義橢圓的邊框的左上角的 Y 座標。 
  44.         // 
  45.         //   width: 
  46.         //     定義橢圓的邊框的寬度。 
  47.         // 
  48.         //   height: 
  49.         //     定義橢圓的邊框的高度。 
  50.         // 
  51.         // 異常:  
  52.         //   System.ArgumentNullException: 
  53.         //     pen 為 null。 
  54.         public void DrawEllipse(Pen pen, float x, float y, float width, float height); 
  55.         // 
  56.         // 摘要:  
  57.         //     繪製一個由邊框定義的橢圓,該邊框由矩形的左上角座標、高度和寬度指定。 
  58.         // 
  59.         // 引數:  
  60.         //   pen: 
  61.         //     System.Drawing.Pen,它確定曲線的顏色、寬度和樣式。 
  62.         // 
  63.         //   x: 
  64.         //     定義橢圓的邊框的左上角的 X 座標。 
  65.         // 
  66.         //   y: 
  67.         //     定義橢圓的邊框的左上角的 Y 座標。 
  68.         // 
  69.         //   width: 
  70.         //     定義橢圓的邊框的寬度。 
  71.         // 
  72.         //   height: 
  73.         //     定義橢圓的邊框的高度。 
  74.         // 
  75.         // 異常:  
  76.         //   System.ArgumentNullException: 
  77.         //     pen 為 null。 
  78.         public void DrawEllipse(Pen pen, int x, int y, int width, int height); 
  79.  
  80. 畫橢圓方法 DrawEllipse()語法定義 

參照上面的語法定義,我們根據第一種語法,可以寫出如下示例程式碼:

畫橢圓DrawEllipse()函式示例程式碼

 
  1. /// <summary> 
  2.         /// 窗體的Paint事件的響應方法 
  3.         /// </summary> 
  4.         /// <param name="sender">當前事件觸發者(當前窗體)</param> 
  5.         /// <param name="e">附帶的事件引數</param> 
  6.         private void Frm_Demo_Paint(object sender, PaintEventArgs e) 
  7.         { 
  8.             Graphics graphics = e.Graphics; // 建立當前窗體的Graphics物件 
  9.             Pen pen = new Pen(Color.Blue, 100);  // 建立藍色 粗細為100的畫筆物件 
  10.             Rectangle rect = new Rectangle(50, 50, 200, 100);   // 建立橢圓所在的矩形範圍 
  11.             graphics.DrawEllipse(pen, rect);    // 在指定的範圍內畫橢圓 
  12.         } 
  13.  
  14. 畫橢圓DrawEllipse()函式示例程式碼 

上述程式碼執行結果如下:

4.5 輸出文字

輸出文字用到的是Graphics物件的DrawString()方法,語法定義如下:

 
  1. // 
  2.         // 摘要:  
  3.         //     在指定位置並且用指定的 System.Drawing.Brush 和 System.Drawing.Font 物件繪製指定的文字字串。 
  4.         // 
  5.         // 引數:  
  6.         //   s: 
  7.         //     要繪製的字串。 
  8.         // 
  9.         //   font: 
  10.         //     System.Drawing.Font,它定義字串的文字格式。 
  11.         // 
  12.         //   brush: 
  13.         //     System.Drawing.Brush,它確定所繪製文字的顏色和紋理。 
  14.         // 
  15.         //   point: 
  16.         //     System.Drawing.PointF 結構,它指定所繪製文字的左上角。 
  17.         // 
  18.         // 異常:  
  19.         //   System.ArgumentNullException: 
  20.         //     brush 為 null。 - 或 - s 為 null。 
  21.         public void DrawString(string s, Font font, Brush brush, PointF point); 
  22.         // 
  23.         // 摘要:  
  24.         //     在指定矩形並且用指定的 System.Drawing.Brush 和 System.Drawing.Font 物件繪製指定的文字字串。 
  25.         // 
  26.         // 引數:  
  27.         //   s: 
  28.         //     要繪製的字串。 
  29.         // 
  30.         //   font: 
  31.         //     System.Drawing.Font,它定義字串的文字格式。 
  32.         // 
  33.         //   brush: 
  34.         //     System.Drawing.Brush,它確定所繪製文字的顏色和紋理。 
  35.         // 
  36.         //   layoutRectangle: 
  37.         //     System.Drawing.RectangleF 結構,它指定所繪製文字的位置。 
  38.         // 
  39.         // 異常:  
  40.         //   System.ArgumentNullException: 
  41.         //     brush 為 null。 - 或 - s 為 null。 
  42.         public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle); 
  43.         // 
  44.         // 摘要:  
  45.         //     在指定位置並且用指定的 System.Drawing.Brush 和 System.Drawing.Font 物件繪製指定的文字字串。 
  46.         // 
  47.         // 引數:  
  48.         //   s: 
  49.         //     要繪製的字串。 
  50.         // 
  51.         //   font: 
  52.         //     System.Drawing.Font,它定義字串的文字格式。 
  53.         // 
  54.         //   brush: 
  55.         //     System.Drawing.Brush,它確定所繪製文字的顏色和紋理。 
  56.         // 
  57.         //   x: 
  58.         //     所繪製文字的左上角的 x 座標。 
  59.         // 
  60.         //   y: 
  61.         //     所繪製文字的左上角的 y 座標。 
  62.         // 
  63.         // 異常:  
  64.         //   System.ArgumentNullException: 
  65.         //     brush 為 null。 - 或 - s 為 null。 
  66.         public void DrawString(string s, Font font, Brush brush, float x, float y); 
  67.         // 
  68.         // 摘要:  
  69.         //     使用指定 System.Drawing.StringFormat 的格式化特性,用指定的 System.Drawing.Brush 和 System.Drawing.Font 
  70.         //     物件在指定的位置繪製指定的文字字串。 
  71.         // 
  72.         // 引數:  
  73.         //   s: 
  74.         //     要繪製的字串。 
  75.         // 
  76.         //   font: 
  77.         //     System.Drawing.Font,它定義字串的文字格式。 
  78.         // 
  79.         //   brush: 
  80.         //     System.Drawing.Brush,它確定所繪製文字的顏色和紋理。 
  81.         // 
  82.         //   point: 
  83.         //     System.Drawing.PointF 結構,它指定所繪製文字的左上角。 
  84.         // 
  85.         //   format: 
  86.         //     System.Drawing.StringFormat,它指定應用於所繪製文字的格式化特性(如行距和對齊方式)。 
  87.         // 
  88.         // 異常:  
  89.         //   System.ArgumentNullException: 
  90.         //     brush 為 null。 - 或 - s 為 null。 
  91.         public void DrawString(string s, Font font, Brush brush, PointF point, StringFormat format); 
  92.         // 
  93.         // 摘要:  
  94.         //     使用指定 System.Drawing.StringFormat 的格式化特性,用指定的 System.Drawing.Brush 和 System.Drawing.Font 
  95.         //     物件在指定的矩形繪製指定的文字字串。 
  96.         // 
  97.         // 引數:  
  98.  &n