正文

GDI圖形編程(4)

Windows移動(dòng)游戲開(kāi)發(fā)實(shí)戰(zhàn) 作者:(美)Adam Dawes


 

3.2.4  畫筆與畫刷

所有的圖形操作都需要一個(gè)Pen對(duì)象(主要用于繪制線段)或者Brush對(duì)象(用于使用純色來(lái)填充窗體中的某個(gè)區(qū)域),這些對(duì)象應(yīng)當(dāng)在代碼中進(jìn)行創(chuàng)建,并且在使用完后進(jìn)行釋放。

1. 畫筆

要?jiǎng)?chuàng)建一個(gè)畫筆,只需要實(shí)例化一個(gè)新的System.Drawing.Pen對(duì)象,然后指定畫筆的顏色即可(我們已經(jīng)在第3.2.3節(jié)中討論過(guò))。

除了指定畫筆顏色外,還可以指定它的寬度(單位為像素)。在默認(rèn)情況下,畫筆的寬度為一個(gè)像素。

畫筆創(chuàng)建完成以后,還可以通過(guò)其Color或Width屬性來(lái)進(jìn)行修改,不需要再新建一個(gè)新的Pen對(duì)象。

畫筆還可以繪制虛線,這是通過(guò)其DashStyle屬性來(lái)控制的。

在使用完一個(gè)Pen對(duì)象后,記得要調(diào)用Dispose方法將分配給它的資源釋放掉。

2. 畫刷

System.Drawing.Brush類與Pen類有所不同,它實(shí)際上是一個(gè)抽象基類。.NET Framework通過(guò)該基類提供了幾種不同類型的畫刷,在實(shí)際使用時(shí),必須對(duì)這些派生的類型進(jìn)行實(shí)例化。

在.NET CF中有兩個(gè)這樣的畫刷類:SolidBrush與TextureBrush。最常用的是SolidBrush;通過(guò)向其構(gòu)造函數(shù)中傳遞一個(gè)Color參數(shù),它就會(huì)創(chuàng)建一個(gè)純色用于填充我們所繪制的區(qū)域的內(nèi)部。TextureBrush的構(gòu)造函數(shù)中要傳遞的不是Color參數(shù),而是一個(gè)Bitmap對(duì)象,它將以該位圖圖像的平鋪副本來(lái)填充圖形內(nèi)部(我們很快就會(huì)討論Bitmap對(duì)象)。

這兩個(gè)畫刷類都提供了用于對(duì)其外觀進(jìn)行修改的屬性(SolidBrush類中是Color屬性,TextureBrush類中是Image屬性)。同樣,在使用完畫刷對(duì)象后應(yīng)調(diào)用Dispose函數(shù)來(lái)釋放它們所占用的資源。

但是,.NET CF中所包含的畫刷派生類比桌面版.NET Framework中提供的要少。如果您對(duì)桌面版GDI的使用方法很熟悉,就會(huì)注意到.NET CF中沒(méi)有提供LinearGradientBrush類,這令人遺憾,因?yàn)樗梢詣?chuàng)建一些有用且很吸引人的填充區(qū)域。我們只好自己編寫代碼來(lái)模擬該類的效果了。

3.2.5  繪制線段

在窗體中可以呈現(xiàn)的所有圖形中,線段是最簡(jiǎn)單的圖形結(jié)構(gòu)。一條線段應(yīng)該包含下面幾個(gè)屬性:

● 用于畫線段的Pen類

● 線段的起點(diǎn)坐標(biāo)

● 線段的終點(diǎn)坐標(biāo)

在繪制線段時(shí),這些屬性都會(huì)以參數(shù)的方式傳遞給Graphics對(duì)象的DrawLine方法,如程序清單3-2所示,這段代碼發(fā)生在窗體的Paint事件中。

程序清單3-2  使用DrawLine方法

private void MyForm_Paint(object sender, PaintEventArgs e)

{

// Draw a line from point (10, 10) to point (40, 40)

using (Pen linePen = new Pen(Color.Black))

{

e.Graphics.DrawLine(linePen, 10, 10, 40, 40);

}

}

這段代碼在坐標(biāo)(10,10)到坐標(biāo)(40,40)之間繪制了一條黑色的線段,如圖3-3所示。注意,線段包含了這兩個(gè)端點(diǎn);線段實(shí)際的高度和寬度都為31像素。這看上去似乎是個(gè)微不足道的小細(xì)節(jié),但如果要繪制很多需要鏈接在一起的線段,這個(gè)細(xì)節(jié)就會(huì)變得重要了。

DrawLines是DrawLine方法的一個(gè)延伸,可以一次性繪制一系列首尾鏈接的線段。您需要提供一個(gè)Point變量數(shù)組,DrawLines會(huì)依次在各相鄰點(diǎn)之間繪制一條連接在一起的線段。該方法不會(huì)將最后一個(gè)點(diǎn)與第一個(gè)點(diǎn)連接起來(lái)。所以,如果您想要繪制一個(gè)閉合的環(huán),就需要在數(shù)組的最后再次指定第一個(gè)點(diǎn)的坐標(biāo),或者使用下一節(jié)將要介紹的DrawPolygon方法。程序清單3-3演示了如何繪制折線,結(jié)果如圖3-4所示。

程序清單3-3  使用DrawLines方法

private void MyForm_Paint(object sender, PaintEventArgs e)

{

// Declare an array of points

Point[] points = { new Point(20, 20), new Point(50, 50),

new Point(80, 20), new Point(110, 50),

new Point(140, 20) , new Point(170, 50) };

using (Pen linePen = new Pen(Color.Black))

{

// Draw a series of lines between each defined point

e.Graphics.DrawLines(linePen, points);

}

}


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)