http://book.51cto.com/art/200908/148535.htm
閉合的形狀(例如,矩形或橢圓)由輪廓和內部組成。輪廓用鋼筆繪製,內部用畫刷填充。GDI+提供了幾種用於填充閉合形狀內部的畫刷類:SolidBrush、HatchBrush、TextureBrush和GradientBrush。所有這些類都是從Brush類繼承的。圖8-12顯示了用實心畫刷填充的橢圓和用陰影畫刷填充的矩形。
1.使用實心畫刷
要填充閉合圖形,需要有Graphics對象和Brush對象。Graphics對象提供 FillRectangle和FillEllipse這樣的方法,BrushObject Storage Service填充的屬性,如顏色和圖案。Brush對象作為參數之一被傳遞到填充方法。例如用純紅色填充橢圓:
- SolidBrush mySolidBrush = new SolidBrush(Color.Red);
- myGraphics.FillEllipse(mySolidBrush, 0, 0, 60, 40);
請注意,在前面的樣本中,畫刷是從Brush繼承的SolidBrush類型。
2.使用陰影畫刷
用陰影畫刷填充圖形時,要指定前景色彩、背景色和陰影樣式。前景色彩是陰影的顏色。
- HatchBrush myHatchBrush =
- new HatchBrush(HatchStyle.Vertical, Color.Blue, Color.Green);
GDI+提供了50多種陰影樣式,8-13所示的3種樣式分別是水平的、前置對角的和交叉的。
在下面的執行個體中,繪製了一個圓形,它是使用交叉陰影畫刷填充的。
【執行個體8-9】 繪製填充圖形。
- Graphics MyGraphics = label1.CreateGraphics();
-
- // 使用陰影畫刷填充圖形
- HatchBrush mybrush1 = new HatchBrush(
- HatchStyle.HorizontalBrick,
- Color.Red,
- Color.Yellow);
- MyGraphics.FillEllipse(mybrush1, 165, 5, 170, 170);
運行結果8-14所示。
3.使用紋理畫刷
有了紋理畫刷,就可以用位元影像中儲存的圖案來填充圖形。例如,假定在磁碟中儲存了一個名為MyTexture.bmp的圖片,下面的代碼通過使用MyTexture.bmp中的圖片來填充橢圓。
- Image myImage = Image.FromFile("MyTexture.bmp");
- TextureBrush myTextureBrush = new TextureBrush(myImage);
- myGraphics.FillEllipse(myTextureBrush, 0, 0, 100, 50);
【執行個體8-10】 使用紋理填充圖形。
- Graphics myGraphics = label1.CreateGraphics();
- Pen pen = new Pen(Color.Red,3);
- myGraphics.DrawEllipse(pen, 25, 10, 260, 150);
-
- // 建立圖片對象
- Image myImage = Image.FromFile("img.gif");
- // 建立紋理畫刷
- TextureBrush myTextureBrush = new TextureBrush(myImage);
- // 使用紋理畫刷填充橢圓圖形
- myGraphics.FillEllipse(myTextureBrush, 25, 10, 260, 150);
運行結果8-15所示。
4.使用漸層畫刷
GDI+提供兩種漸層畫刷:線性和路徑。可以使用線性漸層畫刷來用顏色(在橫向、縱向或斜向移過圖形時會逐漸層化的顏色)填充圖形。
下面的樣本用水平漸層畫刷填充一個橢圓,當從橢圓的左邊緣向右邊緣移動時畫筆顏色會由藍變綠。
【執行個體8-11】 使用漸層畫刷填充圖形。
- Graphics myGraphics = label1.CreateGraphics();
- Pen pen = new Pen(Color.Red, 3);
- myGraphics.DrawEllipse(pen, 25, 10, 260, 150);
-
- Rectangle myRectangle = new Rectangle(25, 10, 260, 150);
- // 建立漸層畫刷,顏色水平從左至右由藍變到綠
- LinearGradientBrush myLinearGradientBrush = new LinearGradientBrush(
- myRectangle,
- Color.Blue,
- Color.Green,
- LinearGradientMode.Horizontal);
- // 使用漸層畫刷填充橢圓
- myGraphics.FillEllipse(myLinearGradientBrush, myRectangle);
運行結果8-16所示。