圖形圖像程序設(shè)計(jì)_第1頁(yè)
圖形圖像程序設(shè)計(jì)_第2頁(yè)
圖形圖像程序設(shè)計(jì)_第3頁(yè)
圖形圖像程序設(shè)計(jì)_第4頁(yè)
圖形圖像程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 本章將主要介紹本章將主要介紹C#C#中圖形、圖像繪中圖形、圖像繪制及處理的基本知識(shí)和技巧,使讀者制及處理的基本知識(shí)和技巧,使讀者對(duì)對(duì)C#C#中圖形繪制及圖像處理過(guò)程有一中圖形繪制及圖像處理過(guò)程有一個(gè)大致的了解。個(gè)大致的了解。2章節(jié)內(nèi)容章節(jié)內(nèi)容18.1 GDI+基礎(chǔ)基礎(chǔ)18.2 基本圖形的繪制基本圖形的繪制18.3 圖像處理圖像處理18.4 小結(jié)小結(jié)318.1.1 GDI+概述GDI+GDI+(Graphics Device Interface PlusGraphics Device Interface Plus,圖形設(shè),圖形設(shè)備接口)是一組應(yīng)用程序編程接口備接口)是一組應(yīng)用程序編程接口(A

2、PI)(API),為開(kāi)發(fā),為開(kāi)發(fā)人員提供了一組與各種設(shè)備進(jìn)行交互的類。人員提供了一組與各種設(shè)備進(jìn)行交互的類。應(yīng)用程序GDI+打印機(jī)顯示器文件418.1.1 GDI+概述GDI+GDI+是微軟推出的新一代二維圖形系統(tǒng),是是微軟推出的新一代二維圖形系統(tǒng),是Windows Windows XPXP和和Windows Server 2003Windows Server 2003操作系統(tǒng)自帶的圖形接口。操作系統(tǒng)自帶的圖形接口。GDIGDI是是WindowsWindows操作系統(tǒng)早期版本的圖形接口。與操作系統(tǒng)早期版本的圖形接口。與GDIGDI相比,相比,GDI+GDI+的性能更優(yōu)化,并添加了許多新的功能。

3、的性能更優(yōu)化,并添加了許多新的功能。目前目前GDI+GDI+已完全替代已完全替代GDIGDI,是在,是在WindowsWindows窗口應(yīng)用程序窗口應(yīng)用程序中以編程方式呈現(xiàn)圖形的唯一一方法。中以編程方式呈現(xiàn)圖形的唯一一方法。GDI+ GDI+ 已經(jīng)被集成到了已經(jīng)被集成到了開(kāi)發(fā)環(huán)境中,所以不管你開(kāi)發(fā)環(huán)境中,所以不管你的的osos是什么版本,只要安裝了是什么版本,只要安裝了框架,就有了框架,就有了GDI+ GDI+ 518.1.1 GDI+概述GDI+GDI+按功能劃分,可分為按功能劃分,可分為3 3類:類:(1 1)二維矢量圖形繪制:使用)二維矢量圖形繪制:使用GDI+GDI+繪制矢量線條和形狀

4、。繪制矢量線條和形狀。 GDI+GDI+提供了用于存儲(chǔ)矢量圖形信息的類,如提供了用于存儲(chǔ)矢量圖形信息的類,如PenPen類,以及類,以及存儲(chǔ)矢量圖形繪制信息的類和實(shí)際繪制圖形的類,如存儲(chǔ)矢量圖形繪制信息的類和實(shí)際繪制圖形的類,如GraphicsGraphics類。類。(2 2)圖像處理:)圖像處理:GDI+GDI+提供了提供了BitmapBitmap、ImageImage等類用于顯等類用于顯示、操作和保存示、操作和保存BMPBMP、JPGJPG、GIFGIF等格式的圖像。等格式的圖像。(3 3)文字顯示:使用)文字顯示:使用GDI+GDI+顯示各種字體、字號(hào)和樣式的顯示各種字體、字號(hào)和樣式的文

5、本。文本。618.1.2 Graphics類 GraphicsGraphics類是所有繪圖的基礎(chǔ),繪圖之前都需要先類是所有繪圖的基礎(chǔ),繪圖之前都需要先創(chuàng)建創(chuàng)建 Graphics Graphics 對(duì)象,相當(dāng)于在窗體中創(chuàng)建了一塊對(duì)象,相當(dāng)于在窗體中創(chuàng)建了一塊畫布,然后使用畫布,然后使用GDI+ GDI+ 繪制線條和形狀、呈現(xiàn)文本或繪制線條和形狀、呈現(xiàn)文本或顯示與操作圖像。顯示與操作圖像。 1 1創(chuàng)建創(chuàng)建GraphicsGraphics對(duì)象,對(duì)象,3 3種方法:種方法: (1 1)利用窗體或控件的)利用窗體或控件的PaintPaint事件中的事件中的PaintEventArgsPaintEvent

6、Args方方法:為窗體或控件編寫法:為窗體或控件編寫PaintPaint事件時(shí),事件時(shí),GraphicsGraphics對(duì)象可以通對(duì)象可以通過(guò)過(guò)PaintPaint事件中的事件中的PaintEventArgsPaintEventArgs方法來(lái)獲取。方法來(lái)獲取。private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgs e) Graphics g=e.Graphics; 718.1.2 Graphics類(2 2)利用窗體或某個(gè)控件的)利用窗體或某個(gè)控件的CreateGraphicsCreateGraphi

7、cs方法:當(dāng)要在某窗方法:當(dāng)要在某窗體或控件上顯示圖形時(shí),可利用某窗體或控件的體或控件上顯示圖形時(shí),可利用某窗體或控件的獲取對(duì)獲取對(duì)GraphicsGraphics對(duì)象的引用。對(duì)象的引用。 Graphics g1=this.CreateGraphics(); Graphics g2=button1.CreateGraphics(); /其中,其中,this代表某窗體,代表某窗體,button1代表代表Button按鈕控件。按鈕控件。(3 3)由)由ImageImage類派生的任意對(duì)象創(chuàng)建圖形對(duì)象:當(dāng)需要更改某類派生的任意對(duì)象創(chuàng)建圖形對(duì)象:當(dāng)需要更改某個(gè)已經(jīng)存在的圖像時(shí),可利用個(gè)已經(jīng)存在的圖像時(shí)

8、,可利用ImageImage類派生的任意對(duì)象創(chuàng)建圖形類派生的任意對(duì)象創(chuàng)建圖形對(duì)象。對(duì)象。GraphicsGraphics對(duì)象。對(duì)象。Bitmap mybitmap=new Bitmap(1.jpg);Graphics g=Graphics.FromImage(mybitmap);:Graphics:Graphics對(duì)象使用完后,應(yīng)當(dāng)及時(shí)釋放掉,否則會(huì)占用內(nèi)對(duì)象使用完后,應(yīng)當(dāng)及時(shí)釋放掉,否則會(huì)占用內(nèi)存資源。存資源。g.g.DisposeDispose() () 818.1.2 Graphics類 2Graphics對(duì)象的方法對(duì)象的方法方法說(shuō)明Clear清除整個(gè)繪圖面并以指定背景色填充DrawAr

9、c繪制一段弧線,它表示由一對(duì)坐標(biāo)、寬度和高度指定的橢圓部分DrawEllipse繪制一個(gè)由邊框定義的橢圓DrawIcon在指定坐標(biāo)處繪制由指定的Icon對(duì)象表示的圖像DrawIconUnstretched繪制指定的Icon對(duì)象表示的圖像,而不縮放該圖像DrawImage在指定位置繪制指定的Image對(duì)象DrawImageUnscaled在坐標(biāo)對(duì)所指定的位置并且按其原始大小繪制指定的Image對(duì)象DrawLine繪制一條連接由坐標(biāo)對(duì)指定的兩個(gè)點(diǎn)的線段9DrawLines繪制一系列連接一組Point結(jié)構(gòu)的線段DrawPie繪制一個(gè)扇形DrawPolygon繪制由一組Point結(jié)構(gòu)定義的多邊形Dra

10、wRectangle繪制由坐標(biāo)對(duì)、寬度和高度指定的矩形DrawRectangles繪制一系列由Rectangle結(jié)構(gòu)指定的矩形DrawString在指定位置繪制指定的文本字符串FillEllipse填充邊框所定義的橢圓的內(nèi)部FillPie填充指定的橢圓所定義的扇形區(qū)的內(nèi)部FillPolygon填充Point結(jié)構(gòu)指定的點(diǎn)數(shù)組所定義的多邊形的內(nèi)部FillRectangle填充由一對(duì)坐標(biāo)、一個(gè)寬度和一個(gè)高度指定的矩形的內(nèi)部FillPath填充GraphicsPath的內(nèi)部18.1.2 Graphics類10下列代碼演示下列代碼演示Graphics對(duì)象的應(yīng)用對(duì)象的應(yīng)用 private void For

11、m1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; / 創(chuàng)建畫布創(chuàng)建畫布 g.Clear(Color.FromArgb(244,23,34); g.Dispose(); private void button1_Click(object sender, EventArgs e) Graphics a = button1.CreateGraphics(); / 創(chuàng)建畫布創(chuàng)建畫布 a.Clear(Color.Red); g.Dispose(); 18.1.2 Graphics類1118.1.3 畫筆對(duì)象的使用Grap

12、hics類對(duì)象相當(dāng)于畫布,而畫筆就相當(dāng)于繪圖的筆,常類對(duì)象相當(dāng)于畫布,而畫筆就相當(dāng)于繪圖的筆,常用用Pen類類來(lái)創(chuàng)建畫筆對(duì)象繪制線、圖形邊緣,來(lái)創(chuàng)建畫筆對(duì)象繪制線、圖形邊緣,Brush類類來(lái)填充來(lái)填充圖形或一個(gè)封閉區(qū)域。圖形或一個(gè)封閉區(qū)域。Pen類的常用屬性為寬度、顏色和樣式。寬度屬性用于確定線類的常用屬性為寬度、顏色和樣式。寬度屬性用于確定線條的寬度,以像素為單位;顏色屬性用于確定線條的顏色;樣條的寬度,以像素為單位;顏色屬性用于確定線條的顏色;樣式屬性用于確定所繪制線條的線型,通常有實(shí)線(式屬性用于確定所繪制線條的線型,通常有實(shí)線(Solid)、)、虛線(虛線(Dash)、點(diǎn)線()、點(diǎn)線(

13、Dot)、點(diǎn)劃線()、點(diǎn)劃線(DashDot)、雙點(diǎn)劃)、雙點(diǎn)劃線(線(DashDotDot)等。另外,在)等。另外,在C#中還可以通過(guò)屬性設(shè)置畫中還可以通過(guò)屬性設(shè)置畫筆起點(diǎn)和終點(diǎn)的樣式,通常在起點(diǎn)或終點(diǎn)加上箭頭。筆起點(diǎn)和終點(diǎn)的樣式,通常在起點(diǎn)或終點(diǎn)加上箭頭。 1218.1.3 畫筆對(duì)象的使用 1 1創(chuàng)建畫筆對(duì)象創(chuàng)建畫筆對(duì)象 常用的常用的PenPen類構(gòu)造函數(shù)為:類構(gòu)造函數(shù)為:public public Pen(ColorPen(Color color) color) public public Pen(ColorPen(Color color color,float width)float

14、width) 例如:例如:Pen p =new Pen p =new Pen(Color.RedPen(Color.Red);); 注意,注意,PenPen對(duì)象使用完畢后,應(yīng)當(dāng)被及時(shí)釋放掉,對(duì)象使用完畢后,應(yīng)當(dāng)被及時(shí)釋放掉,否則會(huì)占據(jù)內(nèi)存資源。否則會(huì)占據(jù)內(nèi)存資源。1318.1.3 畫筆對(duì)象的使用 2畫筆對(duì)象的屬性畫筆對(duì)象的屬性??赏ㄟ^(guò)設(shè)置畫筆的屬性值來(lái)可通過(guò)設(shè)置畫筆的屬性值來(lái)使用畫筆。使用畫筆。名稱說(shuō)明Color設(shè)置畫筆對(duì)象的顏色Width設(shè)置畫筆的寬度EndCap獲取畫筆繪制的直線終點(diǎn)的樣式StartCap設(shè)置畫筆繪制的直線起點(diǎn)的樣式DashStyle設(shè)置畫筆繪制的虛線的線型1418.1.3

15、 畫筆對(duì)象的使用下列代碼演示下列代碼演示Pen對(duì)象的應(yīng)用。對(duì)象的應(yīng)用。Graphics a = this.CreateGraphics();a.Clear(Color.Red);Pen p = new Pen(Color.Blue, 5);p.DashStyle = DashStyle.DashDot; p.EndCap = LineCap.ArrowAnchor;a.DrawLine(p, 10, 30, 200, 30);p.Dispose();a.Dispose();152 2、畫刷(、畫刷(BrushBrush) 畫刷是可與畫刷是可與GraphicsGraphics對(duì)象一起使用來(lái)創(chuàng)建實(shí)

16、心形狀和呈現(xiàn)文對(duì)象一起使用來(lái)創(chuàng)建實(shí)心形狀和呈現(xiàn)文本的對(duì)象??梢杂卯嫻P填充各種圖形形狀,如矩形、橢圓、扇形、本的對(duì)象??梢杂卯嫻P填充各種圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑等。多邊形和封閉路徑等。 幾種不同類型的畫刷幾種不同類型的畫刷: : SolidBrushSolidBrush:畫刷最簡(jiǎn)單的形式,用純色進(jìn)行繪制。:畫刷最簡(jiǎn)單的形式,用純色進(jìn)行繪制。 HatchBrushHatchBrush:類似于:類似于 SolidBrushSolidBrush,但是可以利用該類從大量,但是可以利用該類從大量預(yù)預(yù)定義定義的圖案中選擇繪制時(shí)要使用的圖案,而不是純色。的圖案中選擇繪制時(shí)要使用的圖案,而

17、不是純色。 TextureBrushTextureBrush:使用紋理(如:使用紋理(如圖像圖像)進(jìn)行繪制。)進(jìn)行繪制。 LinearGradientBrushLinearGradientBrush:使用沿漸變混合的兩種顏色進(jìn)行繪制。:使用沿漸變混合的兩種顏色進(jìn)行繪制。 PathGradientBrushPathGradientBrush:基于編程者定義的唯一路徑,使用復(fù)雜的:基于編程者定義的唯一路徑,使用復(fù)雜的混合色漸變進(jìn)行繪制。混合色漸變進(jìn)行繪制。18.1.4 18.1.4 畫刷對(duì)象的使用畫刷對(duì)象的使用16 SolidBrushSolidBrush類用于定義單色畫筆。該類只有一個(gè)構(gòu)造函數(shù),

18、類用于定義單色畫筆。該類只有一個(gè)構(gòu)造函數(shù),帶有一個(gè)帶有一個(gè)ColorColor類型的參數(shù)。類型的參數(shù)。 下面的示例說(shuō)明如何在窗體上繪制一個(gè)純紅色的橢圓。該橢下面的示例說(shuō)明如何在窗體上繪制一個(gè)純紅色的橢圓。該橢圓將符合為其提供的矩形的大小(此例中為表示整個(gè)窗體的圓將符合為其提供的矩形的大?。ù死袨楸硎菊麄€(gè)窗體的ClientRectangleClientRectangle)。)。【例例】單色畫刷演示示例。單色畫刷演示示例。 private void Form1_private void Form1_Paint ( )( ) Graphics g = Graphics g =e.Graphicse

19、.Graphics; ; SolidBrushSolidBrush myBrushmyBrush=new =new SolidBrushSolidBrush( (Color.RedColor.Red);); g.FillEllipseg.FillEllipse( (myBrushmyBrush, , this.ClientRectanglethis.ClientRectangle);); 17運(yùn)行效果運(yùn)行效果:18(2)使用使用HatchBrush類繪制簡(jiǎn)單圖案類繪制簡(jiǎn)單圖案 HatchBrush類用于從大量類用于從大量的圖案中選擇繪制時(shí)的圖案中選擇繪制時(shí)要使用的圖案,而不是純色。要使用的圖案

20、,而不是純色。 下面的示例說(shuō)明如何創(chuàng)建一個(gè)下面的示例說(shuō)明如何創(chuàng)建一個(gè)HatchBrush,它使用,它使用90%的陰影,前景色與背景色的比例為的陰影,前景色與背景色的比例為90:100,并使用白,并使用白色作為前景色,黑色作為背景色。色作為前景色,黑色作為背景色?!纠刻畛浜?jiǎn)單圖案示例。填充簡(jiǎn)單圖案示例。 private void Form1_Click( ) Graphics g = this.CreateGraphics(); HatchBrush aHatchBrush = new HatchBrush(HatchStyle.Percent90,Color.White,Color.Bla

21、ck); g.FillEllipse(aHatchBrush, this.ClientRectangle); 1920 TextureBrush TextureBrush類類。該類提供了。該類提供了5 5個(gè)個(gè)重載的構(gòu)造函數(shù),分別是:重載的構(gòu)造函數(shù),分別是: Public TextureBrush(Image)Public TextureBrush(Image) Public TextureBrush(Image,Rectangle) Public TextureBrush(Image,Rectangle) Public TextureBrush(Image,WrapMode) Public T

22、extureBrush(Image,WrapMode) Public TextureBrush(Image,Rectangle,ImageAttributes) Public TextureBrush(Image,Rectangle,ImageAttributes) Public TextureBrush(Image,WrapMode,Rectangle) Public TextureBrush(Image,WrapMode,Rectangle)其中:其中: 1 1、ImageImage:ImageImage對(duì)象用于指定畫筆的填充圖案。對(duì)象用于指定畫筆的填充圖案。 2 2、RectangleR

23、ectangle:RectangleRectangle對(duì)象用于指定圖像上用于畫筆的矩形區(qū)域,其位置對(duì)象用于指定圖像上用于畫筆的矩形區(qū)域,其位置不能超越圖像的范圍。不能超越圖像的范圍。 3 3、WrapModeWrapMode:WrapModeWrapMode枚舉成員用于指定如何排布圖像,可以取值如下:枚舉成員用于指定如何排布圖像,可以取值如下: ClampClamp: 完全由繪制對(duì)象的邊框決定完全由繪制對(duì)象的邊框決定 TileTile: 平鋪平鋪 TileFlipXTileFlipX: 水平方向翻轉(zhuǎn)并平鋪圖像水平方向翻轉(zhuǎn)并平鋪圖像 TileFlipYTileFlipY: 垂直方向翻轉(zhuǎn)并平鋪圖像

24、垂直方向翻轉(zhuǎn)并平鋪圖像 TileFlipXYTileFlipXY: 水平和垂直方向翻轉(zhuǎn)并平鋪圖像水平和垂直方向翻轉(zhuǎn)并平鋪圖像 4 4、ImageAttributesImageAttributes:ImageAttributesImageAttributes對(duì)象用于指定圖像的附加特性參數(shù)。對(duì)象用于指定圖像的附加特性參數(shù)。21 ImageImage:ImageImage類型,與畫筆關(guān)聯(lián)的圖像對(duì)象。類型,與畫筆關(guān)聯(lián)的圖像對(duì)象。 TransformTransform:MatrixMatrix類型,畫筆的變換矩陣。類型,畫筆的變換矩陣。 WrapModeWrapMode:WrapModeWrapMode

25、枚舉成員,指定圖像的排布方式。枚舉成員,指定圖像的排布方式。 下面的示例說(shuō)明了如何創(chuàng)建一個(gè)下面的示例說(shuō)明了如何創(chuàng)建一個(gè)TextureBrushTextureBrush,例子使用名為,例子使用名為m23.jpgm23.jpg的圖像進(jìn)行繪制。的圖像進(jìn)行繪制。 【例例】創(chuàng)建創(chuàng)建TextureBrushTextureBrush示例。示例。 privateprivate voidvoid Button1_Click( ) Button1_Click( ) Graphics g = Graphics g = this.CreateGraphicsthis.CreateGraphics();(); Text

26、ureBrushTextureBrush myBrushmyBrush= =new new TextureBrushTextureBrush( (new new Bitmap(e:testm23.jpg);Bitmap(e:testm23.jpg); g.FillEllipseg.FillEllipse( (myBrushmyBrush, , thisthis.ClientRectangle.ClientRectangle);); 22運(yùn)行效果:運(yùn)行效果:23 這個(gè)類用于定義這個(gè)類用于定義線性漸變線性漸變畫筆,可以是雙色漸變,也畫筆,可以是雙色漸變,也可以是多色漸變。缺省情況下,漸變由起始顏色

27、沿著水平可以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方向平均過(guò)渡到終止顏色。要定義多色漸變,需要使用方向平均過(guò)渡到終止顏色。要定義多色漸變,需要使用InterpolationColorsInterpolationColors屬性。下面的示例說(shuō)明如何由白色漸屬性。下面的示例說(shuō)明如何由白色漸變到藍(lán)色。變到藍(lán)色。【例例】線性漸變示例。線性漸變示例。 private void Form1_Click( )Graphics g = this.CreateGraphics();LinearGradientBrush myBrush = new LinearGradientBrush(this.Cli

28、entRectangle, Color.White, Color.Blue, LinearGradientMode.Vertical); g.FillRectangle(myBrush, 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è)圖形組成的形體稱作路徑。可中,把一

29、個(gè)或多個(gè)圖形組成的形體稱作路徑。可以使用以使用GraphicsPathGraphicsPath類定義路徑類定義路徑( (GraphicsPathGraphicsPath類表示一系類表示一系列相互連接的直線和曲線列相互連接的直線和曲線) ),使用,使用PathGradientBrushPathGradientBrush類定類定義路徑內(nèi)部的漸變色畫筆。漸變色從路徑內(nèi)部的中心點(diǎn)逐義路徑內(nèi)部的漸變色畫筆。漸變色從路徑內(nèi)部的中心點(diǎn)逐漸過(guò)渡到路徑的外邊界邊緣。漸過(guò)渡到路徑的外邊界邊緣。 PathGradientBrushPathGradientBrush類有三種形式的構(gòu)造函數(shù),形式之一類有三種形式的構(gòu)造函

30、數(shù),形式之一是:是: public public PathGradientBrush(GraphicsPathPathGradientBrush(GraphicsPath path) path) 其中,其中,GraphicsPathGraphicsPath定義畫筆填充的區(qū)域。定義畫筆填充的區(qū)域?!纠柯窂胶吐窂疆嫻P的使用。路徑和路徑畫筆的使用。 using System.Drawing.Drawing2D;using System.Drawing.Drawing2D; 26private void Form1_Paint(object sender,private void Form1_Pa

31、int(object sender, System.Windows.Forms.PaintEventArgsSystem.Windows.Forms.PaintEventArgs e) e) Graphics g=Graphics g=e.Graphicse.Graphics; ;Point Point centerPointcenterPoint=new Point(150,100);=new Point(150,100);intint R=60; R=60; GraphicsPathGraphicsPath path=new path=new GraphicsPathGraphicsPat

32、h();();path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2* *R,2R,2* *R);R);PathGradientBrushPathGradientBrush brush=new brush=new PathGradientBrush(pathPathGradientBrush(path);); / /指定路徑中心點(diǎn)指定路徑中心點(diǎn)brush.CenterPointbrush.CenterPoint= =centerPointcenterPo

33、int; ;/指定路徑中心點(diǎn)的顏色指定路徑中心點(diǎn)的顏色brush.CenterColorbrush.CenterColor= =Color.RedColor.Red; ;/Color/Color類型的數(shù)組指定與路徑上每個(gè)頂點(diǎn)對(duì)應(yīng)的顏色類型的數(shù)組指定與路徑上每個(gè)頂點(diǎn)對(duì)應(yīng)的顏色brush.SurroundColorsbrush.SurroundColors=new Color =new Color Color.PlumColor.Plum ; ;27g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R,2g.FillEllipse(brush,ce

34、nterPoint.X-R,centerPoint.Y-R,2* *R,2R,2* *R);R); centerPointcenterPoint=new Point(350,100);=new Point(350,100); R=20; R=20;path=new path=new GraphicsPathGraphicsPath();();path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2* *R,2R,2* *R);R);path.AddElli

35、pse(centerPoint.X-2path.AddEllipse(centerPoint.X-2* *R,centerPoint.Y-2R,centerPoint.Y-2* *R,4R,4* *R,4R,4* *R);R);path.AddEllipse(centerPoint.X-3path.AddEllipse(centerPoint.X-3* *R,centerPoint.Y-3R,centerPoint.Y-3* *R,6R,6* *R,6R,6* *R);R); brush=new brush=new PathGradientBrush(pathPathGradientBrush

36、(path););brush.CenterPointbrush.CenterPoint= =centerPointcenterPoint; ;brush.CenterColorbrush.CenterColor= =Color.RedColor.Red; ;brush.SurroundColorsbrush.SurroundColors=new Color =new Color Color.Black,Color.Blue,Color.GreenColor.Black,Color.Blue,Color.Green ; ;g.FillPath(brush,pathg.FillPath(brush

37、,path);); 28 在這個(gè)例子中,可以看到當(dāng)使用在這個(gè)例子中,可以看到當(dāng)使用FillPathFillPath()()方法填充路徑的時(shí)方法填充路徑的時(shí)候,如果多個(gè)圖形互相重疊,則重疊部分的數(shù)目為偶數(shù)時(shí)不會(huì)被填候,如果多個(gè)圖形互相重疊,則重疊部分的數(shù)目為偶數(shù)時(shí)不會(huì)被填充,因此右圖中間部分仍為背景色而不是藍(lán)色。充,因此右圖中間部分仍為背景色而不是藍(lán)色。 2918.1.5 Bitmap類 1創(chuàng)建創(chuàng)建Bitmap對(duì)象對(duì)象 Bitmap類的構(gòu)造函數(shù)有多種重載形式,分別如下。類的構(gòu)造函數(shù)有多種重載形式,分別如下。(1)從指定的圖像文件建立)從指定的圖像文件建立Bitmap對(duì)象。對(duì)象。 Bitmap b

38、itmap2=new Bitmap(“D:picturepicture.bmp”);(2)從指定的現(xiàn)有圖像建立)從指定的現(xiàn)有圖像建立Bitmap對(duì)象。對(duì)象。 Bitmap bitmap1=new Bitmap(pictureBox1.Image);(3)從現(xiàn)有的)從現(xiàn)有的Bitmap對(duì)象建立新的對(duì)象建立新的Bitmap對(duì)象,例如下列代碼。對(duì)象,例如下列代碼。 Bitmap bitmap3=new Bitmap(bitmap1);另外,另外,Bitmap類相當(dāng)于一個(gè)圖形容器,里面裝載的對(duì)象即為圖像,因類相當(dāng)于一個(gè)圖形容器,里面裝載的對(duì)象即為圖像,因此在編程時(shí)可以把此在編程時(shí)可以把Bitmap類的

39、對(duì)象看作是一個(gè)圖像類的對(duì)象看作是一個(gè)圖像 . pictureBox1.Image=bitmap1;3018.1.5 Bitmap類2Bitmap類常用的屬性類常用的屬性屬性說(shuō)明Palette獲取或設(shè)置應(yīng)用于Image對(duì)象的調(diào)色板RawFormat獲取Image對(duì)象的格式Size獲取Image對(duì)象的大小Width獲取Image對(duì)象的寬度Height獲取Image對(duì)象的高度3118.1.5 Bitmap類2 2BitmapBitmap類常用的方法類常用的方法 方法說(shuō)明GetPixel獲取此Bitmap中指定像素的顏色GetType獲取當(dāng)前實(shí)例的TypeLockBits將Bitmap對(duì)象鎖定到系統(tǒng)內(nèi)

40、存中MakeTransparent使默認(rèn)的透明顏色對(duì)此Bitmap透明RotateFile將Image對(duì)象旋轉(zhuǎn)、翻轉(zhuǎn)或者同時(shí)旋轉(zhuǎn)和翻轉(zhuǎn)Image對(duì)象Save以指定的格式保存到指定的Stream對(duì)象SaveAdd將指定的Image對(duì)象中的信息添加到此Image對(duì)象中SetPixel設(shè)置Bitmap對(duì)象中指定像素的顏色SetPropertyItem將指定的屬性項(xiàng)設(shè)置為指定的值SetResolution設(shè)置此Bitmap的分辨率3218.1.6 字體與文本1創(chuàng)建字體對(duì)象創(chuàng)建字體對(duì)象 FontFont類屬于類屬于System.DrawingSystem.Drawing命名空間,常用的構(gòu)命名空間,常用的

41、構(gòu)造函數(shù)如下:造函數(shù)如下:Public Font(string familyName,float size,F(xiàn)ontStyle style)字體字體字號(hào)字號(hào)字形字形例:例:Font f=new Font(Font f=new Font(華文行楷華文行楷,26,FontStyle.Italic );,26,FontStyle.Italic );3318.1.6 字體與文本2字體對(duì)象的屬性字體對(duì)象的屬性名稱說(shuō)明Bold指示是否為粗體Italic指示是否為斜體UnderLine指示是否帶下劃線Strikeout指示是否帶刪除線Style獲取字形Size獲取字號(hào)3418.1.6 字體與文本3文本的繪制

42、方法文本的繪制方法 1、 繪制文本使用繪制文本使用DrawString()方法,其重載形式有多種,方法,其重載形式有多種,這里只介紹其中一種,該方法的語(yǔ)法形式如下這里只介紹其中一種,該方法的語(yǔ)法形式如下: public void DrawString (String s, Font font, Brush brush, Rectangle rectangle);3518.1.6 字體與文本 在窗口上輸出字符串在窗口上輸出字符串:private void button1_Click(object sender, EventArgs e) Graphics g = this.CreateGraph

43、ics(); SolidBrush b = new SolidBrush (Color.Red); Font f=new Font(華文行楷華文行楷,26,FontStyle.Italic ); g.DrawString(輸出文字輸出文字, f, b, new Rectangle(50, 30, 200, 40); b.Dispose(); f.Dispose(); g.Dispose();3618.2 基本圖形的繪制 1繪制點(diǎn)繪制點(diǎn) C#C#沒(méi)有提供直接畫點(diǎn)的函數(shù),可以用其他方法間接畫出。沒(méi)有提供直接畫點(diǎn)的函數(shù),可以用其他方法間接畫出。 Graphics g =this.CreateGrap

44、hics(); SolidBrush s = new SolidBrush(Color .Green ); g.FillRectangle(s,20,30,1,1);3718.2 基本圖形的繪制 2繪制直線繪制直線繪制直線使用繪制直線使用DrawLine方法實(shí)現(xiàn),通常有如下兩種構(gòu)造方法:方法實(shí)現(xiàn),通常有如下兩種構(gòu)造方法:public void DrawLine(Pen pen, int x1, int y1, int x2, int y2);public void DrawLine(Pen pen, Point p1, Point p2);其中,其中,x1、y1和和x2、y2分別為起點(diǎn)和終點(diǎn)的

45、坐標(biāo)值。分別為起點(diǎn)和終點(diǎn)的坐標(biāo)值。p1和和p2分分別對(duì)應(yīng)起點(diǎn)和終點(diǎn)。別對(duì)應(yīng)起點(diǎn)和終點(diǎn)。例如:例如: Graphics g=this.CreateGraphics( ); Pen p=new Pen(Color.Red, 2); g.DrawLine(p,40, 50, 200, 300);3818.2 基本圖形的繪制3繪制矩形繪制矩形使用使用DrawRectangle方法繪制矩形,其構(gòu)造函數(shù)如下:方法繪制矩形,其構(gòu)造函數(shù)如下:Public void DrawRectangle(Pen pen, int x, int y, int width, int height) 其中,其中,x、y為矩形左

46、上角頂點(diǎn)的坐標(biāo),為矩形左上角頂點(diǎn)的坐標(biāo),width為矩形的寬度,為矩形的寬度,height為矩形的高度。為矩形的高度。例如:例如: Graphics g=this.CreateGraphics(); Pen pen=new Pen(Color.Red,2); g.Clear(this.BackColor); g.DrawRectangle(pen,10,10,200,200);3918.2 基本圖形的繪制 4繪制橢圓繪制橢圓 5繪制圓弧繪制圓弧 6繪制多邊形繪制多邊形 7繪制曲線繪制曲線 8畫貝塞爾曲線畫貝塞爾曲線 9繪制路徑形成的圖形繪制路徑形成的圖形 10填充圖形填充圖形4018.3 圖像

47、處理 在在C#中,中,GDI+可以顯示和處理多種文件類可以顯示和處理多種文件類型的圖像,如型的圖像,如 . bmp、.jpg、.gif、.wmf、. ico 等,本節(jié)將介紹等,本節(jié)將介紹C#對(duì)這些圖像文件的基對(duì)這些圖像文件的基本處理操作,如圖像的導(dǎo)入導(dǎo)出、放大縮小本處理操作,如圖像的導(dǎo)入導(dǎo)出、放大縮小以及色彩處理(包括分辨率和對(duì)比度等)。以及色彩處理(包括分辨率和對(duì)比度等)。4118.3.1 圖像的基本操作 1圖像的導(dǎo)入圖像的導(dǎo)入 2圖像的保存圖像的保存 3復(fù)制與粘貼復(fù)制與粘貼4218.3.2 圖像的高級(jí)操作 1平移、縮放和旋轉(zhuǎn)操作平移、縮放和旋轉(zhuǎn)操作private void button1_Click(object sender, EventArgs e)Graphics g = this.CreateGraphics(); g.FillRectangle(new SolidBrush(Color.Red),120, 30, 200, 100); /矩形矩形g.RotateTransform(45.0f); /順時(shí)針旋轉(zhuǎn)順時(shí)針旋轉(zhuǎn)45g.FillRectangle(new SolidBrush(Color.Blue),120, 30, 200, 100); /水平方向向右

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論