版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1C#圖形程序設(shè)計(jì)基礎(chǔ)圖形程序設(shè)計(jì)基礎(chǔ)1 GDI+繪圖基礎(chǔ)繪圖基礎(chǔ)2 基本圖形的繪制基本圖形的繪制3 實(shí)用圖形程序設(shè)計(jì)實(shí)用圖形程序設(shè)計(jì)21 GDI+繪圖基礎(chǔ)繪圖基礎(chǔ)1.1 圖形設(shè)備接口圖形設(shè)備接口 GDI+:Graphics Device Interface Plus,它提供了各種豐富,它提供了各種豐富的圖形圖像處理功能的圖形圖像處理功能 在在C#.NET中,使用中,使用GDI+處理二維(處理二維(2D)的圖形和圖像,)的圖形和圖像,使用使用DirectX處理三維(處理三維(3D)的圖形圖像)的圖形圖像 GDI+主要有二維矢量圖形、圖像處理和版式三部分組成主要有二維矢量圖形、圖像處理和版式三部
2、分組成 GDI+提供了存儲(chǔ)基元自身相關(guān)信息的類和結(jié)構(gòu)、存儲(chǔ)基元提供了存儲(chǔ)基元自身相關(guān)信息的類和結(jié)構(gòu)、存儲(chǔ)基元繪制方式相關(guān)信息的類,以及實(shí)際進(jìn)行繪制的類繪制方式相關(guān)信息的類,以及實(shí)際進(jìn)行繪制的類 GDI+ 為使用各種字體、字號(hào)和樣式來顯示文本這種復(fù)雜任為使用各種字體、字號(hào)和樣式來顯示文本這種復(fù)雜任務(wù)提供了大量的支持務(wù)提供了大量的支持 其他高級(jí)功能其他高級(jí)功能3圖形圖像處理中常常調(diào)用的名稱空間:圖形圖像處理中常常調(diào)用的名稱空間:System:包括常用基礎(chǔ)數(shù)據(jù)類型和:包括常用基礎(chǔ)數(shù)據(jù)類型和24個(gè)子名稱空間個(gè)子名稱空間System.Drawing:提供了對(duì)提供了對(duì)GDI+基本圖形功能的訪問,主要基本圖
3、形功能的訪問,主要有有Graphics類、類、Bitmap類、從類、從Brush類繼承的類、類繼承的類、Font類、類、Icon類、類、Image類、類、Pen類、類、Color類等類等System.Drawing.Drawing2D:提供了高級(jí)的二維和矢量圖形功:提供了高級(jí)的二維和矢量圖形功能。主要有梯度型畫刷、能。主要有梯度型畫刷、Matrix類(用于定義幾何變換)和類(用于定義幾何變換)和GraphicsPath類等類等 System.Drawing.Imaging:提供了高級(jí):提供了高級(jí) GDI+ 圖像處理功能圖像處理功能System.WinForms:提供許多與數(shù)據(jù)處理相關(guān)的結(jié)構(gòu)的類
4、:提供許多與數(shù)據(jù)處理相關(guān)的結(jié)構(gòu)的類 System.Timers:提供精確的計(jì)時(shí)操作:提供精確的計(jì)時(shí)操作System.Drawing.Text:提供了高級(jí):提供了高級(jí) GDI+ 字體和文本排版功能字體和文本排版功能41.2 創(chuàng)建創(chuàng)建Graphics對(duì)象對(duì)象GraphicsGraphics類包含在類包含在System.DrawingSystem.Drawing名稱空間下。要進(jìn)行圖形處名稱空間下。要進(jìn)行圖形處理,必須首先創(chuàng)建理,必須首先創(chuàng)建GraphicsGraphics對(duì)象,然后才能利用它進(jìn)行各種對(duì)象,然后才能利用它進(jìn)行各種畫圖操作,即先創(chuàng)建畫圖操作,即先創(chuàng)建GraphicsGraphics對(duì)象再
5、使用該對(duì)象的方法繪圖、對(duì)象再使用該對(duì)象的方法繪圖、顯示文本或處理圖像。顯示文本或處理圖像。創(chuàng)建創(chuàng)建GraphicsGraphics對(duì)象的形式有:對(duì)象的形式有:1.1.在窗體或控件的在窗體或控件的PaintPaint事件中直接引用事件中直接引用GraphicsGraphics對(duì)象對(duì)象 每一個(gè)窗體或控件都有一個(gè)每一個(gè)窗體或控件都有一個(gè)PaintPaint事件,該事件的參數(shù)中包事件,該事件的參數(shù)中包含了當(dāng)前窗體或控件的含了當(dāng)前窗體或控件的GraphicsGraphics對(duì)象,對(duì)象,在為在為窗體或窗體或控件創(chuàng)建繪控件創(chuàng)建繪制代碼時(shí),一般使用此方法來獲取對(duì)圖形對(duì)象的引用:制代碼時(shí),一般使用此方法來獲取對(duì)
6、圖形對(duì)象的引用:Private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; 52.2.利用窗體或某個(gè)控件的利用窗體或某個(gè)控件的CreateGraphicsCreateGraphics方法方法此方法所建對(duì)象是該控件或窗體的繪圖區(qū)域,可把當(dāng)前窗體的此方法所建對(duì)象是該控件或窗體的繪圖區(qū)域,可把當(dāng)前窗體的畫刷、字體、顏色作為缺省值獲取對(duì)畫刷、字體、顏色作為缺省值獲取對(duì)GraphicsGraphics對(duì)象的引用,對(duì)象的引用,注意這種對(duì)象只有在處理當(dāng)前注意這種對(duì)
7、象只有在處理當(dāng)前WindowsWindows窗口消息的過程中有效;窗口消息的過程中有效;如果想在已存在的窗體或控件上繪圖,可以使用此方法。如果想在已存在的窗體或控件上繪圖,可以使用此方法。例如:例如: Graphics g=this.CreatGraphics();Graphics g=this.CreatGraphics();3.3.從繼承自圖像的任何對(duì)象創(chuàng)建從繼承自圖像的任何對(duì)象創(chuàng)建GraphicsGraphics對(duì)象對(duì)象此方法在需要更改已存在的圖像時(shí)十分有用,此方法在需要更改已存在的圖像時(shí)十分有用,例如:例如: 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在圖形圖像處理程序設(shè)計(jì)中,與在圖形圖像處理程序設(shè)計(jì)中,與GraphicsGraphics對(duì)象一起使用的用戶對(duì)象一起使用的用戶對(duì)象常有:對(duì)象常有:PenPen:用于繪制線條、勾勒形狀輪廓等;:用于繪制線條、勾勒形狀輪廓等;BrushBrush:用于填充圖形區(qū)域;:用于填充圖形區(qū)域;FontFont:提供有關(guān)在呈現(xiàn)文本時(shí)要使用什么形狀的
9、說明;:提供有關(guān)在呈現(xiàn)文本時(shí)要使用什么形狀的說明;ColorColor:該結(jié)構(gòu)表示要顯示的不同顏色:該結(jié)構(gòu)表示要顯示的不同顏色注意:由于圖像對(duì)象非常占資源,所以在不用這些對(duì)象時(shí)要用注意:由于圖像對(duì)象非常占資源,所以在不用這些對(duì)象時(shí)要用DisposeDispose方法及時(shí)釋放資源方法及時(shí)釋放資源7附:附: 顏色顏色顏色是進(jìn)行圖形操作的基本要素。任何一種顏色都可以由四個(gè)顏色是進(jìn)行圖形操作的基本要素。任何一種顏色都可以由四個(gè)分量決定,每個(gè)分量占據(jù)一個(gè)字節(jié):分量決定,每個(gè)分量占據(jù)一個(gè)字節(jié): R R:紅色,取值范圍:紅色,取值范圍0 0255255,255255為飽和紅色為飽和紅色 G G:綠色,取值范
10、圍:綠色,取值范圍0 0255255,255255為飽和綠色為飽和綠色 B B:藍(lán)色,取值范圍:藍(lán)色,取值范圍0 0255255,255255為飽和藍(lán)色為飽和藍(lán)色 A A:AlphaAlpha值,即透明度。取值范圍值,即透明度。取值范圍0 0255255,0 0為完全透明,為完全透明,255255為完全不透明為完全不透明在在System.System.DrawingDrawing名稱空間下,有一個(gè)名稱空間下,有一個(gè)ColorColor結(jié)構(gòu)類型,包含系結(jié)構(gòu)類型,包含系統(tǒng)已定義的顏色種類。統(tǒng)已定義的顏色種類??梢允褂孟铝蟹椒▌?chuàng)建顏色對(duì)象:可以使用下列方法創(chuàng)建顏色對(duì)象: 使用使用FromArgbFr
11、omArgb指定任意顏色指定任意顏色 這個(gè)方法有兩種常用的形式:這個(gè)方法有兩種常用的形式:8第一種形式是直接指定三種顏色,方法原型為:第一種形式是直接指定三種顏色,方法原型為:public static Color FromArgb( int red, int green, int blue ) 三個(gè)參數(shù)分別表示三個(gè)參數(shù)分別表示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為十六進(jìn)制表示形式。為十六進(jìn)制表示形式。第二種形式使用四個(gè)參數(shù),格式為:第二種形式使用四個(gè)參數(shù),格式為:public static Color FromArgb( int alpha, int red, int green, int blue )四個(gè)參數(shù)分別表示透明度和四個(gè)參數(shù)分別表示透明度和 R R、G G、B B三色值。三色值。9使用系統(tǒng)預(yù)定義顏色使用系統(tǒng)預(yù)定義顏色 在在Color結(jié)構(gòu)中已經(jīng)預(yù)定義了結(jié)構(gòu)中已經(jīng)預(yù)定義了141種顏色,可以直接使種顏色,可
13、以直接使用,例如:用,例如: Color myColor; myColor = Color.Red; myColor = Color.Aquamarine; myColor = Color.LightGoldenrodYellow; 101.3 創(chuàng)建畫筆對(duì)象創(chuàng)建畫筆對(duì)象用用PenPen類創(chuàng)建畫筆對(duì)象,畫筆通常具有寬度、樣式和顏色三種屬類創(chuàng)建畫筆對(duì)象,畫筆通常具有寬度、樣式和顏色三種屬性。性。1.Pen1.Pen對(duì)象的創(chuàng)建:對(duì)象的創(chuàng)建: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對(duì)象的屬性:對(duì)象的屬性:畫筆對(duì)象的屬性用于返回或設(shè)置畫筆對(duì)象的顏色
16、、畫線樣式、畫筆對(duì)象的屬性用于返回或設(shè)置畫筆對(duì)象的顏色、畫線樣式、畫線始點(diǎn)及終點(diǎn)的樣式等。常用屬性如下:畫線始點(diǎn)及終點(diǎn)的樣式等。常用屬性如下:Color:Color:DashCap:DashCap:DashStyle:DashStyle:EndCap:EndCap:PenType:PenType:StartCap:StartCap:Width:Width:例:例:121) 1) 新建一個(gè)新建一個(gè)WindowsWindows應(yīng)用程序,適當(dāng)加寬窗體寬度。然后應(yīng)用程序,適當(dāng)加寬窗體寬度。然后切換到代碼方式,添加名稱空間引用:切換到代碼方式,添加名稱空間引用: 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( 藍(lán)色,寬度為藍(lán)色,寬度為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(點(diǎn)劃線點(diǎn)劃線, this.Font, new SolidBrush(Color.Black), 5, 85); g.DrawLine( pen, new Point(110,90), new Point(380,90); 14運(yùn)行結(jié)果運(yùn)行結(jié)果 151.4 創(chuàng)建畫刷創(chuàng)建畫刷畫刷是可與畫刷是可與GraphicsGraphics對(duì)象一起使用來創(chuàng)建實(shí)心形狀和呈現(xiàn)文本對(duì)象一起使用來創(chuàng)建實(shí)心形狀和呈現(xiàn)文本的對(duì)象???/p>
21、以用畫刷填充各種圖形形狀,如矩形、橢圓、扇的對(duì)象??梢杂卯嬎⑻畛涓鞣N圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑等。形、多邊形和封閉路徑等。幾種不同類型的畫刷幾種不同類型的畫刷: SolidBrush:畫刷最簡單的形式,用純色進(jìn)行繪制畫刷最簡單的形式,用純色進(jìn)行繪制 HatchBrush:類似于類似于 SolidBrush,但是可以利用該類從大,但是可以利用該類從大量預(yù)設(shè)的圖案中選擇繪制時(shí)要使用的圖案,而不是純色量預(yù)設(shè)的圖案中選擇繪制時(shí)要使用的圖案,而不是純色 TextureBrush:使用紋理(如圖像)進(jìn)行繪制使用紋理(如圖像)進(jìn)行繪制 LinearGradientBrush:使用沿漸變混
22、合的兩種顏色進(jìn)行繪使用沿漸變混合的兩種顏色進(jìn)行繪制制 PathGradientBrush :基于編程者定義的唯一路徑,使用復(fù)基于編程者定義的唯一路徑,使用復(fù)雜的混合色漸變進(jìn)行繪制雜的混合色漸變進(jìn)行繪制16(1)(1)使用使用SolidBrushSolidBrush類定義單色畫筆類定義單色畫筆 SolidBrushSolidBrush類用于定義單色畫筆。該類只有一個(gè)構(gòu)造函類用于定義單色畫筆。該類只有一個(gè)構(gòu)造函數(shù),帶有一個(gè)數(shù),帶有一個(gè)ColorColor類型的參數(shù)。類型的參數(shù)。 下面的示例說明如何在窗體上繪制一個(gè)純紅色的橢圓。下面的示例說明如何在窗體上繪制一個(gè)純紅色的橢圓。該橢圓將符合為其提供的矩
23、形的大小(此例中為表示整個(gè)該橢圓將符合為其提供的矩形的大?。ù死袨楸硎菊麄€(gè)窗體的窗體的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運(yùn)行效果運(yùn)行效果18(2)(2)
24、使用使用HatchBrushHatchBrush類繪制簡單圖案類繪制簡單圖案 HatchBrushHatchBrush類用于從大量預(yù)設(shè)的圖案中選擇繪制時(shí)要使用類用于從大量預(yù)設(shè)的圖案中選擇繪制時(shí)要使用的圖案,而不是純色。的圖案,而不是純色。 下面的示例說明如何創(chuàng)建一個(gè)下面的示例說明如何創(chuàng)建一個(gè)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運(yùn)行效果:運(yùn)行效果:20(3)(3)使用使用TextureBrushTextureBrush類繪制復(fù)雜圖案類繪制復(fù)雜圖案 TextureBrushTextureBrush類
26、允許使用一幅圖像作為填充的樣式。該類類允許使用一幅圖像作為填充的樣式。該類提供了提供了5 5個(gè)重載的構(gòu)造函數(shù),分別是:個(gè)重載的構(gòu)造函數(shù),分別是: 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:用于指定圖像上用于畫筆的矩形區(qū)域,其位置不能超:用于指定圖像上用于畫筆的矩形區(qū)域,其位置不能超 越圖像的范圍。越圖像的范圍。 WrapModeWrapMode:WrapModeWrapMode枚舉成員用于指定如何排布圖像,可以是枚舉成員用于指定如何排布圖像,可以是 Clamp Clamp 完全由繪制對(duì)象的邊框決定完全由繪制對(duì)象的邊框決定 Tile Tile 平鋪平鋪 TileFlipX TileFlipX 水平方向翻轉(zhuǎn)并平鋪圖像水平方向翻轉(zhuǎn)并平鋪圖像 TileFlipY TileFlipY 垂直方向翻
28、轉(zhuǎn)并平鋪圖像垂直方向翻轉(zhuǎn)并平鋪圖像 TileFlipXY TileFlipXY 水平和垂直方向翻轉(zhuǎn)并平鋪圖像水平和垂直方向翻轉(zhuǎn)并平鋪圖像21 ImageAttributes ImageAttributes:用于指定圖像的附加特性參數(shù)。:用于指定圖像的附加特性參數(shù)。 TextureBrushTextureBrush類有三個(gè)屬性:類有三個(gè)屬性: ImageImage:ImageImage類型,與畫筆關(guān)聯(lián)的圖像對(duì)象。類型,與畫筆關(guān)聯(lián)的圖像對(duì)象。 TransformTransform:MatrixMatrix類型,畫筆的變換矩陣。類型,畫筆的變換矩陣。 WrapModeWrapMode:WrapMod
29、eWrapMode枚舉成員,指定圖像的排布方式。枚舉成員,指定圖像的排布方式。 下面的示例說明了如何創(chuàng)建一個(gè)下面的示例說明了如何創(chuàng)建一個(gè)TextureBrush,例子使,例子使用名為用名為m23.jpg的圖像進(jìn)行繪制。的圖像進(jìn)行繪制。 例例: :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運(yùn)行效果:運(yùn)行效果:23(4)(4)使用使用LinearGradientBrushLinearGradientBrush類定義線性漸變類定義線性漸變 這個(gè)類用于定義線性漸變畫筆,可以是雙色漸變,也可這個(gè)類用于定義線性漸變畫筆,可以是雙色漸變,也可以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方向平均過渡到終止顏色。要定義多色漸變,需要使用向平均過渡到終止顏色。要定義多色漸變,需要使用InterpolationColorsInterpolationColors屬性
31、。下面的示例說明如何由白色漸屬性。下面的示例說明如何由白色漸變到藍(lán)色。變到藍(lán)色。例例: :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 如果創(chuàng)建應(yīng)用程序后向設(shè)計(jì)窗體上拖放一些控件,如果創(chuàng)建應(yīng)用程序后向設(shè)計(jì)窗體上拖放一些控件,可以看到運(yùn)行后該圖就是一個(gè)漂亮的背景了。可以看到運(yùn)行后該圖就是一個(gè)漂亮的背景了。 25(5)(5)使用使用PathGradientBrushPathGradientBrush類實(shí)現(xiàn)彩色漸變類實(shí)現(xiàn)彩色漸變 在在GDI+GDI+中,把一個(gè)或多個(gè)圖形組成的形體稱作路徑??梢灾校岩粋€(gè)或多個(gè)圖形組成的形體稱作路徑。可以使用使用GraphicsPathGraphicsPath類定義路徑,使用類定義路徑,使用PathGradientBrushPathG
33、radientBrush類定類定義路徑內(nèi)部的漸變色畫筆。漸變色從路徑內(nèi)部的中心點(diǎn)逐漸過義路徑內(nèi)部的漸變色畫筆。漸變色從路徑內(nèi)部的中心點(diǎn)逐漸過渡到路徑的外邊界邊緣。渡到路徑的外邊界邊緣。PathGradientBrushPathGradientBrush類有三種形式的構(gòu)造函數(shù),形式之一是:類有三種形式的構(gòu)造函數(shù),形式之一是: public PathGradientBrush( GraphicsPath path ) 其中,其中,GraphicsPathGraphicsPath定義畫筆填充的區(qū)域。定義畫筆填充的區(qū)域。例例, ,路徑和路徑畫筆的使用路徑和路徑畫筆的使用: : 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); /指定路徑中心點(diǎn)指定路徑中心點(diǎn)brush.CenterPoint=centerPoint;/指定路徑中心點(diǎn)的顏色指定路徑中心點(diǎn)的顏色brush.CenterColor=Color.Red;/Color類型的數(shù)組指定與路徑上每個(gè)頂點(diǎn)對(duì)應(yīng)的顏色類型的數(shù)組指定與路徑上每個(gè)頂點(diǎn)對(duì)應(yīng)的顏色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 在這個(gè)例子中,可以看到當(dāng)使用在這個(gè)例子中,可以看到當(dāng)使用FillPath()FillPath()方法填充路徑的時(shí)方法填充路徑的時(shí)候,如果多個(gè)圖形互相重疊,則重疊部分的數(shù)目為偶數(shù)時(shí)不會(huì)被填候,如果多個(gè)圖形互相重疊,則重疊部分的數(shù)目為偶數(shù)時(shí)不會(huì)被填充,因此右圖中間部分仍為背景色而不是藍(lán)色。充,因此右圖中間部分仍為背景色而不是藍(lán)色。 29附附:平
38、移、旋轉(zhuǎn)與縮放平移、旋轉(zhuǎn)與縮放 Graphics Graphics類提供了三種對(duì)圖像進(jìn)行幾何變換的方法,它們類提供了三種對(duì)圖像進(jìn)行幾何變換的方法,它們是是TranslateTransform()TranslateTransform()方法、方法、RotateTransform()RotateTransform()方法和方法和ScaleTransform()ScaleTransform()方法,分別用于圖形圖像的平移、旋轉(zhuǎn)和方法,分別用于圖形圖像的平移、旋轉(zhuǎn)和縮放(以坐標(biāo)系原點(diǎn)為中心)。縮放(以坐標(biāo)系原點(diǎn)為中心)。TranslateTransform( )TranslateTransform(
39、)方法的形式為:方法的形式為: public void TranslateTransform(float dx,float dy) 其中,其中,dxdx表示平移的表示平移的x x分量,分量,dydy表示平移的表示平移的y y分量分量; ;RotateTransform( )RotateTransform( )方法的形式為:方法的形式為: public void RotateTransform(float angle) 其中,其中,angleangle表示旋轉(zhuǎn)角度表示旋轉(zhuǎn)角度; ;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); /順時(shí)針旋轉(zhuǎn)順時(shí)針旋轉(zhuǎn)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個(gè)像素,垂直方向向上平移個(gè)像素,垂直方向向上平移100100個(gè)像素個(gè)像素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. 畫點(diǎn)畫點(diǎn)C#采用采用Point結(jié)構(gòu)和結(jié)構(gòu)和SetPixel()方法完成畫點(diǎn)的功能;其中方法完成畫點(diǎn)的功能;其中Point用于圖形設(shè)計(jì),用于圖形設(shè)計(jì),SetPixel()用于圖像處理用于圖像處理Point原型:原型: public struct Point;使用:使用: public Point p1 = new Point();每個(gè)點(diǎn)結(jié)構(gòu)有每個(gè)點(diǎn)結(jié)構(gòu)有x和和y兩個(gè)屬性,表示橫縱坐標(biāo),如:兩個(gè)屬性,表示橫縱坐標(biāo),如: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為橢圓外接矩形左上角的坐標(biāo),為橢圓外接矩形左上角的坐標(biāo),widthwidth定義橢圓定義橢圓的外接矩形的寬度的外接矩形的寬度,height,height定義橢圓外接矩形的高度。定義橢圓外接矩形的高度。2) public void DrawEllipse(Pen pen, Rectangle rect) 其中其中rectrect為為R
48、ectangleRectangle結(jié)構(gòu),用于確定橢圓的外接矩形。結(jié)構(gòu),用于確定橢圓的外接矩形。364. 繪制圓弧繪制圓弧public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle ) 其中其中x, yx, y為橢圓外接矩形左上角的坐標(biāo),為橢圓外接矩形左上角的坐標(biāo),widthwidth定義橢圓。定義橢圓。 startAngle圓弧起點(diǎn),圓弧起點(diǎn), sweepAngle順時(shí)針畫過的角度順時(shí)針畫過的角度的外接矩形的寬度的外接矩形的寬度,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 )各參數(shù)意義:各參數(shù)意義:例:例: 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)參數(shù)含意:參數(shù)含意:2) public void DrawRectangle(Pen pen, Rectangle rect)參數(shù)含意:參數(shù)含意:例:例: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 )該方法用于繪制多個(gè)矩形。該方法用于繪制多個(gè)矩形。例例: :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每段貝塞爾曲線都需要四個(gè)點(diǎn),第一個(gè)點(diǎn)是起始點(diǎn),第四個(gè)點(diǎn)每段貝塞爾曲線都需要四個(gè)點(diǎn),
54、第一個(gè)點(diǎn)是起始點(diǎn),第四個(gè)點(diǎn)是終止點(diǎn),第二個(gè)點(diǎn)和第三個(gè)點(diǎn)控制曲線的形狀。使用是終止點(diǎn),第二個(gè)點(diǎn)和第三個(gè)點(diǎn)控制曲線的形狀。使用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結(jié)構(gòu)的數(shù)組,第一段貝塞爾曲線從點(diǎn)數(shù)組結(jié)構(gòu)的數(shù)組,第一段貝塞爾曲線從點(diǎn)數(shù)組中的第一個(gè)點(diǎn)到第四個(gè)點(diǎn)繪制而成。以后每段曲線只需要三個(gè)中的第一個(gè)點(diǎn)到第四個(gè)點(diǎn)繪制而成。以后每段曲線只需要三個(gè)點(diǎn):兩個(gè)控制點(diǎn)和一個(gè)結(jié)束點(diǎn)。前一段曲線的結(jié)束點(diǎn)會(huì)自動(dòng)用點(diǎn):兩個(gè)控制點(diǎn)和一個(gè)結(jié)束點(diǎn)。前一段曲線的結(jié)束點(diǎn)會(huì)自動(dòng)用作后一段曲線的起始點(diǎn)。作后一段曲
56、線的起始點(diǎn)。 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表示在二維平面中定義點(diǎn)的、浮點(diǎn)表示在二維平面中定義點(diǎn)的、浮點(diǎn) x 和和 y 坐標(biāo)的坐標(biāo)的有序?qū)τ行驅(qū)?例例:畫一個(gè)四邊形畫一個(gè)四邊形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方法方法這個(gè)方法用平滑的曲線將各節(jié)點(diǎn)連接起來,但會(huì)自動(dòng)把首尾節(jié)點(diǎn)這個(gè)方法用平滑的曲線將各
59、節(jié)點(diǎn)連接起來,但會(huì)自動(dòng)把首尾節(jié)點(diǎn)連接起來構(gòu)成封閉曲線。連接起來構(gòu)成封閉曲線。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型型參數(shù)參數(shù)指定彎曲強(qiáng)度,該值范圍為指定彎曲強(qiáng)度,
60、該值范圍為0.0f 1.0f,超出此范圍會(huì),超出此范圍會(huì)產(chǎn)生異常,當(dāng)彎曲強(qiáng)度為零時(shí),就是直線,默認(rèn)張力為產(chǎn)生異常,當(dāng)彎曲強(qiáng)度為零時(shí),就是直線,默認(rèn)張力為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方法(以四個(gè)點(diǎn)畫出一條基本曲線)方法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版苗木種植與深加工一體化銷售合同3篇
- 網(wǎng)絡(luò)技術(shù)支持班組準(zhǔn)則
- 演出服務(wù)質(zhì)量異常預(yù)防計(jì)劃
- 藥品管理法律制度藥品刑事責(zé)任
- 氣體鋼瓶配送員聘用合同
- 2025版跨區(qū)域公司搬遷合同范本:全面保障員工權(quán)益與辦公流程3篇
- 保險(xiǎn)公司招投標(biāo)政策
- 環(huán)保家居二手房交易合同模板
- 城市廣場(chǎng)室內(nèi)泳池施工合同
- 礦山鉆探施工合同
- 智能膠囊內(nèi)鏡導(dǎo)航算法研究
- 人力資源產(chǎn)業(yè)園可行性方案
- 《新疆大學(xué)版學(xué)術(shù)期刊目錄》(人文社科)
- 2024年初級(jí)社會(huì)工作者《社會(huì)工作綜合能力》模擬試卷一
- 重慶市2023-2024學(xué)年高一上學(xué)期期末聯(lián)合檢測(cè)物理試卷(含答案解析)
- 糖尿病性視網(wǎng)膜病變匯報(bào)演示課件
- GB/T 43575-2023區(qū)塊鏈和分布式記賬技術(shù)系統(tǒng)測(cè)試規(guī)范
- 小兒肺炎的病例討論
- 校園教職工思想動(dòng)態(tài)和現(xiàn)實(shí)表現(xiàn)動(dòng)態(tài)評(píng)估
- 《氣體滅火系統(tǒng)》課件
- 黑龍江省雞西市2023-2024學(xué)年八年級(jí)上學(xué)期第二次質(zhì)量監(jiān)測(cè)道德與法治試題
評(píng)論
0/150
提交評(píng)論