GDI+_C_圖形程序設計基礎_第1頁
GDI+_C_圖形程序設計基礎_第2頁
GDI+_C_圖形程序設計基礎_第3頁
GDI+_C_圖形程序設計基礎_第4頁
GDI+_C_圖形程序設計基礎_第5頁
已閱讀5頁,還剩53頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1C#圖形程序設計基礎圖形程序設計基礎1 GDI+繪圖基礎繪圖基礎2 基本圖形的繪制基本圖形的繪制3 實用圖形程序設計實用圖形程序設計21 GDI+繪圖基礎繪圖基礎1.1 圖形設備接口圖形設備接口 GDI+:Graphics Device Interface Plus,它提供了各種豐富,它提供了各種豐富的圖形圖像處理功能的圖形圖像處理功能 在在C#.NET中,使用中,使用GDI+處理二維(處理二維(2D)的圖形和圖像,)的圖形和圖像,使用使用DirectX處理三維(處理三維(3D)的圖形圖像)的圖形圖像 GDI+主要有二維矢量圖形、圖像處理和版式三部分組成主要有二維矢量圖形、圖像處理和版式三部

2、分組成 GDI+提供了存儲基元自身相關信息的類和結構、存儲基元提供了存儲基元自身相關信息的類和結構、存儲基元繪制方式相關信息的類,以及實際進行繪制的類繪制方式相關信息的類,以及實際進行繪制的類 GDI+ 為使用各種字體、字號和樣式來顯示文本這種復雜任為使用各種字體、字號和樣式來顯示文本這種復雜任務提供了大量的支持務提供了大量的支持 其他高級功能其他高級功能3圖形圖像處理中常常調用的名稱空間:圖形圖像處理中常常調用的名稱空間:System:包括常用基礎數據類型和:包括常用基礎數據類型和24個子名稱空間個子名稱空間System.Drawing:提供了對提供了對GDI+基本圖形功能的訪問,主要基本圖

3、形功能的訪問,主要有有Graphics類、類、Bitmap類、從類、從Brush類繼承的類、類繼承的類、Font類、類、Icon類、類、Image類、類、Pen類、類、Color類等類等System.Drawing.Drawing2D:提供了高級的二維和矢量圖形功:提供了高級的二維和矢量圖形功能。主要有梯度型畫刷、能。主要有梯度型畫刷、Matrix類(用于定義幾何變換)和類(用于定義幾何變換)和GraphicsPath類等類等 System.Drawing.Imaging:提供了高級:提供了高級 GDI+ 圖像處理功能圖像處理功能System.WinForms:提供許多與數據處理相關的結構的類

4、:提供許多與數據處理相關的結構的類 System.Timers:提供精確的計時操作:提供精確的計時操作System.Drawing.Text:提供了高級:提供了高級 GDI+ 字體和文本排版功能字體和文本排版功能41.2 創建創建Graphics對象對象GraphicsGraphics類包含在類包含在System.DrawingSystem.Drawing名稱空間下。要進行圖形處名稱空間下。要進行圖形處理,必須首先創建理,必須首先創建GraphicsGraphics對象,然后才能利用它進行各種對象,然后才能利用它進行各種畫圖操作,即先創建畫圖操作,即先創建GraphicsGraphics對象再

5、使用該對象的方法繪圖、對象再使用該對象的方法繪圖、顯示文本或處理圖像。顯示文本或處理圖像。創建創建GraphicsGraphics對象的形式有:對象的形式有:1.1.在窗體或控件的在窗體或控件的PaintPaint事件中直接引用事件中直接引用GraphicsGraphics對象對象 每一個窗體或控件都有一個每一個窗體或控件都有一個PaintPaint事件,該事件的參數中包事件,該事件的參數中包含了當前窗體或控件的含了當前窗體或控件的GraphicsGraphics對象,對象,在為在為窗體或窗體或控件創建繪控件創建繪制代碼時,一般使用此方法來獲取對圖形對象的引用:制代碼時,一般使用此方法來獲取對

6、圖形對象的引用:Private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; 52.2.利用窗體或某個控件的利用窗體或某個控件的CreateGraphicsCreateGraphics方法方法此方法所建對象是該控件或窗體的繪圖區域,可把當前窗體的此方法所建對象是該控件或窗體的繪圖區域,可把當前窗體的畫刷、字體、顏色作為缺省值獲取對畫刷、字體、顏色作為缺省值獲取對GraphicsGraphics對象的引用,對象的引用,注意這種對象只有在處理當前注意這種對

7、象只有在處理當前WindowsWindows窗口消息的過程中有效;窗口消息的過程中有效;如果想在已存在的窗體或控件上繪圖,可以使用此方法。如果想在已存在的窗體或控件上繪圖,可以使用此方法。例如:例如: Graphics g=this.CreatGraphics();Graphics g=this.CreatGraphics();3.3.從繼承自圖像的任何對象創建從繼承自圖像的任何對象創建GraphicsGraphics對象對象此方法在需要更改已存在的圖像時十分有用,此方法在需要更改已存在的圖像時十分有用,例如:例如: Bitmap bitmap = new Bitmap(Bitmap bitm

8、ap = new Bitmap(”C:testa1.bmpC:testa1.bmp”);); Graphics g = Graphics.FromImage( bitmap ); Graphics g = Graphics.FromImage( bitmap );6在圖形圖像處理程序設計中,與在圖形圖像處理程序設計中,與GraphicsGraphics對象一起使用的用戶對象一起使用的用戶對象常有:對象常有:PenPen:用于繪制線條、勾勒形狀輪廓等;:用于繪制線條、勾勒形狀輪廓等;BrushBrush:用于填充圖形區域;:用于填充圖形區域;FontFont:提供有關在呈現文本時要使用什么形狀的

9、說明;:提供有關在呈現文本時要使用什么形狀的說明;ColorColor:該結構表示要顯示的不同顏色:該結構表示要顯示的不同顏色注意:由于圖像對象非常占資源,所以在不用這些對象時要用注意:由于圖像對象非常占資源,所以在不用這些對象時要用DisposeDispose方法及時釋放資源方法及時釋放資源7附:附: 顏色顏色顏色是進行圖形操作的基本要素。任何一種顏色都可以由四個顏色是進行圖形操作的基本要素。任何一種顏色都可以由四個分量決定,每個分量占據一個字節:分量決定,每個分量占據一個字節: R R:紅色,取值范圍:紅色,取值范圍0 0255255,255255為飽和紅色為飽和紅色 G G:綠色,取值范

10、圍:綠色,取值范圍0 0255255,255255為飽和綠色為飽和綠色 B B:藍色,取值范圍:藍色,取值范圍0 0255255,255255為飽和藍色為飽和藍色 A A:AlphaAlpha值,即透明度。取值范圍值,即透明度。取值范圍0 0255255,0 0為完全透明,為完全透明,255255為完全不透明為完全不透明在在System.System.DrawingDrawing名稱空間下,有一個名稱空間下,有一個ColorColor結構類型,包含系結構類型,包含系統已定義的顏色種類。統已定義的顏色種類。可以使用下列方法創建顏色對象:可以使用下列方法創建顏色對象: 使用使用FromArgbFr

11、omArgb指定任意顏色指定任意顏色 這個方法有兩種常用的形式:這個方法有兩種常用的形式:8第一種形式是直接指定三種顏色,方法原型為:第一種形式是直接指定三種顏色,方法原型為:public static Color FromArgb( int red, int green, int blue ) 三個參數分別表示三個參數分別表示R R、G G、B B三色,三色,AlphaAlpha值使用缺省值值使用缺省值255255,即,即完全不透明;例如:完全不透明;例如:Color red = Color.FromArgb( 255, 0, 0);Color green = Color.FromArgb(

12、 0, 255, 0);Color blue = Color.FromArgb( 0, 0, 0 xff); 其中,其中,0 xff0 xff為十六進制表示形式。為十六進制表示形式。第二種形式使用四個參數,格式為:第二種形式使用四個參數,格式為:public static Color FromArgb( int alpha, int red, int green, int blue )四個參數分別表示透明度和四個參數分別表示透明度和 R R、G G、B B三色值。三色值。9使用系統預定義顏色使用系統預定義顏色 在在Color結構中已經預定義了結構中已經預定義了141種顏色,可以直接使種顏色,可

13、以直接使用,例如:用,例如: Color myColor; myColor = Color.Red; myColor = Color.Aquamarine; myColor = Color.LightGoldenrodYellow; 101.3 創建畫筆對象創建畫筆對象用用PenPen類創建畫筆對象,畫筆通常具有寬度、樣式和顏色三種屬類創建畫筆對象,畫筆通常具有寬度、樣式和顏色三種屬性。性。1.Pen1.Pen對象的創建:對象的創建:public Pen( Color color );public Pen( Color color );public Pen( Color color, floa

14、t width );public Pen( Color color, float width );public Pen( Brush brush );public Pen( Brush brush );public Pen( Brush brush, float width );public Pen( Brush brush, float width );如:如:Pen myPen = new Pen( Color.Black );Pen myPen = new Pen( Color.Black );Pen myPen = new Pen( Color.Black, 5 );Pen myPen

15、 = new Pen( Color.Black, 5 );SolidBrush myBrush = new SolidBrush( Color.Red );SolidBrush myBrush = new SolidBrush( Color.Red );Pen myPen = new Pen( myBrush);Pen myPen = new Pen( myBrush);Pen myPen = new Pen( myBrush, 5 );Pen myPen = new Pen( myBrush, 5 );112.Pen2.Pen對象的屬性:對象的屬性:畫筆對象的屬性用于返回或設置畫筆對象的顏色

16、、畫線樣式、畫筆對象的屬性用于返回或設置畫筆對象的顏色、畫線樣式、畫線始點及終點的樣式等。常用屬性如下:畫線始點及終點的樣式等。常用屬性如下:Color:Color:DashCap:DashCap:DashStyle:DashStyle:EndCap:EndCap:PenType:PenType:StartCap:StartCap:Width:Width:例:例:121) 1) 新建一個新建一個WindowsWindows應用程序,適當加寬窗體寬度。然后應用程序,適當加寬窗體寬度。然后切換到代碼方式,添加名稱空間引用:切換到代碼方式,添加名稱空間引用: using System.Drawing

17、.Drawing2D; 2) 2) 添加添加Form1_PaintForm1_Paint事件代碼。事件代碼。 private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;Pen pen = new Pen( Color.Blue, 10.5f ); g.DrawString( 藍色,寬度為藍色,寬度為10.5, this.Font, new SolidBrush(Color.Black), 5, 5 );g.DrawLine( pen, new Poi

18、nt(110,10), new Point(380,10) );pen.Width=2; pen.Color=Color.Red;g.DrawString( 紅色,寬度為紅色,寬度為2, this.Font, new SolidBrush(Color.Black), 5, 25 );13 g.DrawLine( pen, new Point(110,30), new Point(380,30) ); pen.StartCap = LineCap.Flat; pen.EndCap = LineCap.ArrowAnchor; pen.Width = 9; g.DrawString( 紅色箭頭線紅

19、色箭頭線, this.Font, new SolidBrush(Color.Black), 5, 45); g.DrawLine( pen,new Point(110,50), new Point(380,50); pen.DashStyle = DashStyle.Custom; pen.DashPattern = new float 4,4; pen.Width = 2; pen.EndCap = LineCap.NoAnchor; g.DrawString( 自定義虛線自定義虛線, this.Font, new SolidBrush(Color.Black), 5, 65 ); g.Dr

20、awLine( pen, new Point(110,70), new Point(380,70) ); pen.DashStyle = DashStyle.Dot; g.DrawString(點劃線點劃線, this.Font, new SolidBrush(Color.Black), 5, 85); g.DrawLine( pen, new Point(110,90), new Point(380,90); 14運行結果運行結果 151.4 創建畫刷創建畫刷畫刷是可與畫刷是可與GraphicsGraphics對象一起使用來創建實心形狀和呈現文本對象一起使用來創建實心形狀和呈現文本的對象。可

21、以用畫刷填充各種圖形形狀,如矩形、橢圓、扇的對象。可以用畫刷填充各種圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑等。形、多邊形和封閉路徑等。幾種不同類型的畫刷幾種不同類型的畫刷: SolidBrush:畫刷最簡單的形式,用純色進行繪制畫刷最簡單的形式,用純色進行繪制 HatchBrush:類似于類似于 SolidBrush,但是可以利用該類從大,但是可以利用該類從大量預設的圖案中選擇繪制時要使用的圖案,而不是純色量預設的圖案中選擇繪制時要使用的圖案,而不是純色 TextureBrush:使用紋理(如圖像)進行繪制使用紋理(如圖像)進行繪制 LinearGradientBrush:使用沿漸變混

22、合的兩種顏色進行繪使用沿漸變混合的兩種顏色進行繪制制 PathGradientBrush :基于編程者定義的唯一路徑,使用復基于編程者定義的唯一路徑,使用復雜的混合色漸變進行繪制雜的混合色漸變進行繪制16(1)(1)使用使用SolidBrushSolidBrush類定義單色畫筆類定義單色畫筆 SolidBrushSolidBrush類用于定義單色畫筆。該類只有一個構造函類用于定義單色畫筆。該類只有一個構造函數,帶有一個數,帶有一個ColorColor類型的參數。類型的參數。 下面的示例說明如何在窗體上繪制一個純紅色的橢圓。下面的示例說明如何在窗體上繪制一個純紅色的橢圓。該橢圓將符合為其提供的矩

23、形的大小(此例中為表示整個該橢圓將符合為其提供的矩形的大小(此例中為表示整個窗體的窗體的ClientRectangleClientRectangle)。)。例例: :private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;SolidBrush myBrush = new SolidBrush( Color.Red );g.FillEllipse( myBrush, this.ClientRectangle ); 17運行效果運行效果18(2)(2)

24、使用使用HatchBrushHatchBrush類繪制簡單圖案類繪制簡單圖案 HatchBrushHatchBrush類用于從大量預設的圖案中選擇繪制時要使用類用于從大量預設的圖案中選擇繪制時要使用的圖案,而不是純色。的圖案,而不是純色。 下面的示例說明如何創建一個下面的示例說明如何創建一個HatchBrushHatchBrush,它使用,它使用90%90%的的陰影,前景色與背景色的比例為陰影,前景色與背景色的比例為90:10090:100,并使用白色作為前,并使用白色作為前景色,黑色作為背景色。景色,黑色作為背景色。例例: : private void Form1_Paint(object

25、sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics;HatchBrush aHatchBrush = new HatchBrush( HatchStyle.Percent90, Color.White, Color.Black);g.FillEllipse( aHatchBrush, this.ClientRectangle ); 19運行效果:運行效果:20(3)(3)使用使用TextureBrushTextureBrush類繪制復雜圖案類繪制復雜圖案 TextureBrushTextureBrush類

26、允許使用一幅圖像作為填充的樣式。該類類允許使用一幅圖像作為填充的樣式。該類提供了提供了5 5個重載的構造函數,分別是:個重載的構造函數,分別是: Public TextureBrush( Image ) Public TextureBrush( Image, Rectangle ) Public TextureBrush( Image, WrapMode ) Public TextureBrush( Image, Rectangle, ImageAttributes) Public TextureBrush( Image, WrapMode, Rectangle)其中:其中:ImageImag

27、e:用于指定畫筆的填充圖案。:用于指定畫筆的填充圖案。 RectangleRectangle:用于指定圖像上用于畫筆的矩形區域,其位置不能超:用于指定圖像上用于畫筆的矩形區域,其位置不能超 越圖像的范圍。越圖像的范圍。 WrapModeWrapMode:WrapModeWrapMode枚舉成員用于指定如何排布圖像,可以是枚舉成員用于指定如何排布圖像,可以是 Clamp Clamp 完全由繪制對象的邊框決定完全由繪制對象的邊框決定 Tile Tile 平鋪平鋪 TileFlipX TileFlipX 水平方向翻轉并平鋪圖像水平方向翻轉并平鋪圖像 TileFlipY TileFlipY 垂直方向翻

28、轉并平鋪圖像垂直方向翻轉并平鋪圖像 TileFlipXY TileFlipXY 水平和垂直方向翻轉并平鋪圖像水平和垂直方向翻轉并平鋪圖像21 ImageAttributes ImageAttributes:用于指定圖像的附加特性參數。:用于指定圖像的附加特性參數。 TextureBrushTextureBrush類有三個屬性:類有三個屬性: ImageImage:ImageImage類型,與畫筆關聯的圖像對象。類型,與畫筆關聯的圖像對象。 TransformTransform:MatrixMatrix類型,畫筆的變換矩陣。類型,畫筆的變換矩陣。 WrapModeWrapMode:WrapMod

29、eWrapMode枚舉成員,指定圖像的排布方式。枚舉成員,指定圖像的排布方式。 下面的示例說明了如何創建一個下面的示例說明了如何創建一個TextureBrush,例子使,例子使用名為用名為m23.jpg的圖像進行繪制。的圖像進行繪制。 例例: :private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;TextureBrush myBrush = new TextureBrush(new Bitmap(e:testm23.jpg);g.FillEll

30、ipse( myBrush, this.ClientRectangle ); 22運行效果:運行效果:23(4)(4)使用使用LinearGradientBrushLinearGradientBrush類定義線性漸變類定義線性漸變 這個類用于定義線性漸變畫筆,可以是雙色漸變,也可這個類用于定義線性漸變畫筆,可以是雙色漸變,也可以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方向平均過渡到終止顏色。要定義多色漸變,需要使用向平均過渡到終止顏色。要定義多色漸變,需要使用InterpolationColorsInterpolationColors屬性

31、。下面的示例說明如何由白色漸屬性。下面的示例說明如何由白色漸變到藍色。變到藍色。例例: :private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; LinearGradientBrush myBrush = new LinearGradientBrush( this.ClientRectangle, Color.White, Color.Blue, LinearGradientMode.Vertical ); g.FillRectangle( m

32、yBrush, this.ClientRectangle );24 如果創建應用程序后向設計窗體上拖放一些控件,如果創建應用程序后向設計窗體上拖放一些控件,可以看到運行后該圖就是一個漂亮的背景了。可以看到運行后該圖就是一個漂亮的背景了。 25(5)(5)使用使用PathGradientBrushPathGradientBrush類實現彩色漸變類實現彩色漸變 在在GDI+GDI+中,把一個或多個圖形組成的形體稱作路徑。可以中,把一個或多個圖形組成的形體稱作路徑。可以使用使用GraphicsPathGraphicsPath類定義路徑,使用類定義路徑,使用PathGradientBrushPathG

33、radientBrush類定類定義路徑內部的漸變色畫筆。漸變色從路徑內部的中心點逐漸過義路徑內部的漸變色畫筆。漸變色從路徑內部的中心點逐漸過渡到路徑的外邊界邊緣。渡到路徑的外邊界邊緣。PathGradientBrushPathGradientBrush類有三種形式的構造函數,形式之一是:類有三種形式的構造函數,形式之一是: public PathGradientBrush( GraphicsPath path ) 其中,其中,GraphicsPathGraphicsPath定義畫筆填充的區域。定義畫筆填充的區域。例例, ,路徑和路徑畫筆的使用路徑和路徑畫筆的使用: : using System

34、.Drawing.Drawing2D;using System.Drawing.Drawing2D; 26private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;Point centerPoint = new Point(150,100);int R=60; GraphicsPath path=new GraphicsPath();path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R);Pa

35、thGradientBrush brush=new PathGradientBrush(path); /指定路徑中心點指定路徑中心點brush.CenterPoint=centerPoint;/指定路徑中心點的顏色指定路徑中心點的顏色brush.CenterColor=Color.Red;/Color類型的數組指定與路徑上每個頂點對應的顏色類型的數組指定與路徑上每個頂點對應的顏色brush.SurroundColors=new Color Color.Plum ;27g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R, 2*R,2*R); c

36、enterPoint=new Point(350,100); R=20;path=new GraphicsPath();path.AddEllipse( centerPoint.X-R,centerPoint.Y-R,2*R,2*R);path.AddEllipse( centerPoint.X-2*R,centerPoint.Y-2*R, 4*R,4*R);path.AddEllipse(centerPoint.X-3*R,centerPoint.Y-3*R, 6*R,6*R); brush=new PathGradientBrush(path);brush.CenterPoint=cent

37、erPoint;brush.CenterColor=Color.Red;brush.SurroundColors=new Color Color.Black,Color.Blue,Color.Green ;g.FillPath(brush,path);28 在這個例子中,可以看到當使用在這個例子中,可以看到當使用FillPath()FillPath()方法填充路徑的時方法填充路徑的時候,如果多個圖形互相重疊,則重疊部分的數目為偶數時不會被填候,如果多個圖形互相重疊,則重疊部分的數目為偶數時不會被填充,因此右圖中間部分仍為背景色而不是藍色。充,因此右圖中間部分仍為背景色而不是藍色。 29附附:平

38、移、旋轉與縮放平移、旋轉與縮放 Graphics Graphics類提供了三種對圖像進行幾何變換的方法,它們類提供了三種對圖像進行幾何變換的方法,它們是是TranslateTransform()TranslateTransform()方法、方法、RotateTransform()RotateTransform()方法和方法和ScaleTransform()ScaleTransform()方法,分別用于圖形圖像的平移、旋轉和方法,分別用于圖形圖像的平移、旋轉和縮放(以坐標系原點為中心)。縮放(以坐標系原點為中心)。TranslateTransform( )TranslateTransform(

39、)方法的形式為:方法的形式為: public void TranslateTransform(float dx,float dy) 其中,其中,dxdx表示平移的表示平移的x x分量,分量,dydy表示平移的表示平移的y y分量分量; ;RotateTransform( )RotateTransform( )方法的形式為:方法的形式為: public void RotateTransform(float angle) 其中,其中,angleangle表示旋轉角度表示旋轉角度; ;ScaleTransform( )ScaleTransform( )方法的形式為:方法的形式為: public vo

40、id ScaleTransform(float sx,float sy) 其中,其中,sx表示表示x方向的縮放比例,方向的縮放比例,sy表示表示y方向的縮放比例方向的縮放比例; ; 30例:三種變換方法示例。例:三種變換方法示例。 privateprivate voidvoid Form1_Paint( Form1_Paint(objectobject sender, sender, System.Windows.Forms.PaintEventArgs e) System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics;Grap

41、hics g = e.Graphics;g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.FromArgb( 80, Color.Red ), SolidBrush(Color.FromArgb( 80, Color.Red ), 120,30,200,100); 120,30,200,100); /橢圓透明度橢圓透明度80%80%g.RotateTransform(30.0f); g.RotateTransform(30.0f); /順時針旋轉順時針旋轉3030度度g.FillEllipse(g.FillEllipse(new new S

42、olidBrush(Color.FromArgb(80,Color.Blue),SolidBrush(Color.FromArgb(80,Color.Blue), 120,30,200,100); 120,30,200,100);/水平方向向右平移水平方向向右平移200200個像素,垂直方向向上平移個像素,垂直方向向上平移100100個像素個像素g.TranslateTransform(200.0f,-100.0f);g.TranslateTransform(200.0f,-100.0f);g.FillEllipse(g.FillEllipse(new new SolidBrush(Color

43、.FromArgb(50,Color.Green),SolidBrush(Color.FromArgb(50,Color.Green), 120,30,200,100); 120,30,200,100);g.ScaleTransform(0.5f,0.5f); g.ScaleTransform(0.5f,0.5f); /縮小到一半縮小到一半 g.FillEllipse(g.FillEllipse(newnew SolidBrush(Color.FromArgb(100, Color.Red),SolidBrush(Color.FromArgb(100, Color.Red), 120,30,2

44、00,100); 120,30,200,100); 31322 基本圖形的繪制基本圖形的繪制1. 畫點畫點C#采用采用Point結構和結構和SetPixel()方法完成畫點的功能;其中方法完成畫點的功能;其中Point用于圖形設計,用于圖形設計,SetPixel()用于圖像處理用于圖像處理Point原型:原型: public struct Point;使用:使用: public Point p1 = new Point();每個點結構有每個點結構有x和和y兩個屬性,表示橫縱坐標,如:兩個屬性,表示橫縱坐標,如:p1.x = 30;p1.y = 100;332. 畫直線畫直線1) DrawLin

45、e方法方法public void DrawLine( Pen pen, int x1, int y1,int x2, int y2 );或或 public void DrawLine( Pen pen, Point pt1, Point pt2 );如:如:Graphics g = this.CreateGraphics( ); Pen p1 = new Pen( Color.Red, 2 ); Point pt1 = new Point( 40,50); Point pt2 = new Point( 220,150); g.DrawLine( p1, 10, 20, 40, 50 ); g.

46、DrawLine( p1, pt1, pt2 );2) DrawLines方法方法public void DrawLines( Pen pen, Point pts );34private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)Pen pen = new Pen(Color.Black, 3);Point points = new Point( 10, 10), new Point( 10, 100), new Point(200, 50), new Point(250, 120) ; e.G

47、raphics.DrawLines(pen, points); 效果效果 353. 畫橢圓畫橢圓1) public void DrawEllipse(Pen pen, int x, int y, int width, int height) 其中其中x, yx, y為橢圓外接矩形左上角的坐標,為橢圓外接矩形左上角的坐標,widthwidth定義橢圓定義橢圓的外接矩形的寬度的外接矩形的寬度,height,height定義橢圓外接矩形的高度。定義橢圓外接矩形的高度。2) public void DrawEllipse(Pen pen, Rectangle rect) 其中其中rectrect為為R

48、ectangleRectangle結構,用于確定橢圓的外接矩形。結構,用于確定橢圓的外接矩形。364. 繪制圓弧繪制圓弧public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle ) 其中其中x, yx, y為橢圓外接矩形左上角的坐標,為橢圓外接矩形左上角的坐標,widthwidth定義橢圓。定義橢圓。 startAngle圓弧起點,圓弧起點, sweepAngle順時針畫過的角度順時針畫過的角度的外接矩形的寬度的外接矩形的寬度,height,height定義

49、橢圓外接矩形的高度。定義橢圓外接矩形的高度。例:例: Graphics g = this.CreateGraphics( );Graphics g = this.CreateGraphics( );Pen pen = new Pen(Color.Red, 2 );Pen pen = new Pen(Color.Red, 2 );g.Clear(this.BackColor);g.Clear(this.BackColor);g.DrawArc(pen,0,0,200,300,-60,180);g.DrawArc(pen,0,0,200,300,-60,180);375. DrawPie(扇形)(

50、扇形)public void DrawPie( Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle )各參數意義:各參數意義:例:例: Graphics g = this.CreateGraphics( );Graphics g = this.CreateGraphics( );Pen pen = new Pen(Color.Red, 2 );Pen pen = new Pen(Color.Red, 2 );g.Clear(this.BackColor);g.Clear(this.BackCo

51、lor);g.DrawPie(pen,60,60,160,160,160,200);g.DrawPie(pen,60,60,160,160,160,200);386. 畫矩形畫矩形1) public void DrawRectangle(Pen pen, int x, int y, int width, int height)參數含意:參數含意:2) public void DrawRectangle(Pen pen, Rectangle rect)參數含意:參數含意:例:例:private void Form1_Paint(object sender, System.Windows.Form

52、s.PaintEventArgs e)Graphics g = e.Graphics;Pen pen = new Pen( Color.Black, 3);Rectangle rect = new Rectangle( 30, 30, 200, 100);e.Graphics.DrawRectangle( pen, rect );393)3)public void DrawRectangles( Pen pen, Rectangle rects )該方法用于繪制多個矩形。該方法用于繪制多個矩形。例例: :private void Form1_Paint(object sender, Syste

53、m.Windows.Forms.PaintEventArgs e)Graphics g = e.Graphics;Pen pen = new Pen(Color.Black, 3);Rectangle rects = new Rectangle( 0, 0, 100, 200), new Rectangle(100, 200, 250, 50), new Rectangle(300, 0, 50, 100) ;e.Graphics.DrawRectangles( pen, rects ); 407. Bezier每段貝塞爾曲線都需要四個點,第一個點是起始點,第四個點每段貝塞爾曲線都需要四個點,

54、第一個點是起始點,第四個點是終止點,第二個點和第三個點控制曲線的形狀。使用是終止點,第二個點和第三個點控制曲線的形狀。使用DrawBezier()DrawBezier()方法繪制一段貝塞爾曲線,使用方法繪制一段貝塞爾曲線,使用DrawBeziers()DrawBeziers()方方法繪制多段貝塞爾曲線。常用形式有:法繪制多段貝塞爾曲線。常用形式有:1) public void DrawBezier( Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4 )2) public

55、 void DrawBezier( Pen pen, Point pt1, Point pt2, Point pt3, Point pt4 )3) public void DrawBeziers( Pen pen, Point points ) 其中其中points是是Point結構的數組,第一段貝塞爾曲線從點數組結構的數組,第一段貝塞爾曲線從點數組中的第一個點到第四個點繪制而成。以后每段曲線只需要三個中的第一個點到第四個點繪制而成。以后每段曲線只需要三個點:兩個控制點和一個結束點。前一段曲線的結束點會自動用點:兩個控制點和一個結束點。前一段曲線的結束點會自動用作后一段曲線的起始點。作后一段曲

56、線的起始點。 41例例: :private void Form1_Paint( object sender, System.Windows.Forms.PaintEventArgs e)Pen blackPen = new Pen(Color.Black, 3);Point bezierPoints =new Point(50, 100),new Point(100, 10),new Point(150,290),new Point(200, 100),new Point(250,10),new Point(300, 290),new Point(350,100) ; e.Graphics.D

57、rawBeziers( blackPen, bezierPoints ); 428. DrawPolygon(多邊形)(多邊形)public void DrawPolygon( Pen pen, Point points );public void DrawPolygon( Pen pen, PointF points );其中:其中:PointF表示在二維平面中定義點的、浮點表示在二維平面中定義點的、浮點 x 和和 y 坐標的坐標的有序對有序對 例例:畫一個四邊形畫一個四邊形private void button_Click(object sender, System.EventArgs e

58、 ) Graphics g = this.CreateGraphics( ); Pen pen = new Pen( Color.Red, 2 ); g.Clear( this.BackColor ); Point p1 = new Point new Point( 10, 120 ), new Point( 120, 100), new Point( 300,180 ), new Point( 60, 200) ; g.DrawPolygon( pen, p1 );439. DrawClosedCurve方法方法這個方法用平滑的曲線將各節點連接起來,但會自動把首尾節點這個方法用平滑的曲線將各

59、節點連接起來,但會自動把首尾節點連接起來構成封閉曲線。連接起來構成封閉曲線。public void DrawClosedCurve( Pen pen, Point pts );public void DrawClosedCurve( Pen pen, PointF pts );public void DrawClosedCurve( Pen, Point , float, FillMode );public void DrawClosedCurve( Pen, PointF , float, FillMode ); 其中其中floatfloat型型參數參數指定彎曲強度,該值范圍為指定彎曲強度,

60、該值范圍為0.0f 1.0f,超出此范圍會,超出此范圍會產生異常,當彎曲強度為零時,就是直線,默認張力為產生異常,當彎曲強度為零時,就是直線,默認張力為0.50.5。例:例:Pen blackPen = new Pen( Color.Black );Point p1 = new Point new Point( 10, 120 ), new Point( 120, 100), new Point( 300,180 ), new Point( 60, 200) ;g.DrawClosedCurve( blackPen, p1 );4410. DrawCurve方法(以四個點畫出一條基本曲線)方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論