C# 画刷和填充的形状

http://book.51cto.com/art/200908/148535.htm

闭合的形状(例如,矩形或椭圆)由轮廓和内部组成。轮廓用钢笔绘制,内部用画刷填充。GDI+提供了几种用于填充闭合形状内部的画刷类:SolidBrush、HatchBrush、TextureBrush和GradientBrush。所有这些类都是从Brush类继承的。图8-12显示了用实心画刷填充的椭圆和用阴影画刷填充的矩形。

 
(点击查看大图)图8-12  填充的图形

1.使用实心画刷

要填充闭合图形,需要有Graphics对象和Brush对象。Graphics对象提供 FillRectangle和FillEllipse这样的方法,Brush对象存储填充的属性,如颜色和图案。Brush对象作为参数之一被传递到填充方法。例如用纯红色填充椭圆:

  1. SolidBrush mySolidBrush = new SolidBrush(Color.Red);  
  2. myGraphics.FillEllipse(mySolidBrush, 0, 0, 60, 40); 

请注意,在前面的示例中,画刷是从Brush继承的SolidBrush类型。

2.使用阴影画刷

用阴影画刷填充图形时,要指定前景色、背景色和阴影样式。前景色是阴影的颜色。

  1. HatchBrush myHatchBrush =   
  2.    new HatchBrush(HatchStyle.Vertical, Color.Blue, Color.Green); 

GDI+提供了50多种阴影样式,如图8-13所示的3种样式分别是水平的、前置对角的和交叉的。

 
(点击查看大图)图8-13  阴影样式的图形

在下面的实例中,绘制了一个圆形,它是使用交叉阴影画刷填充的。

【实例8-9】  绘制填充图形。

  1. Graphics MyGraphics = label1.CreateGraphics();  
  2.              
  3. // 使用阴影画刷填充图形  
  4. HatchBrush mybrush1 = new HatchBrush(  
  5.                         HatchStyle.HorizontalBrick,   
  6.                         Color.Red,  
  7.                         Color.Yellow);  
  8. MyGraphics.FillEllipse(mybrush1, 165, 5, 170, 170); 

运行结果如图8-14所示。

 
图8-14  绘制填充图形

3.使用纹理画刷

有了纹理画刷,就可以用位图中存储的图案来填充图形。例如,假定在磁盘中存储了一个名为MyTexture.bmp的图片,下面的代码通过使用MyTexture.bmp中的图片来填充椭圆。

  1. Image myImage = Image.FromFile("MyTexture.bmp");  
  2. TextureBrush myTextureBrush = new TextureBrush(myImage);  
  3. myGraphics.FillEllipse(myTextureBrush, 0, 0, 100, 50); 

【实例8-10】  使用纹理填充图形。

  1. Graphics myGraphics = label1.CreateGraphics();  
  2. Pen pen = new Pen(Color.Red,3);  
  3. myGraphics.DrawEllipse(pen, 25, 10, 260, 150);  
  4.  
  5. // 创建图片对象  
  6. Image myImage = Image.FromFile("img.gif");  
  7. // 创建纹理画刷  
  8. TextureBrush myTextureBrush = new TextureBrush(myImage);  
  9. // 使用纹理画刷填充椭圆图形  
  10. myGraphics.FillEllipse(myTextureBrush, 25, 10, 260, 150); 

运行结果如图8-15所示。

 
图8-15  使用纹理填充的图形

4.使用渐变画刷

GDI+提供两种渐变画刷:线性和路径。可以使用线性渐变画刷来用颜色(在横向、纵向或斜向移过图形时会逐渐变化的颜色)填充图形。

下面的示例用水平渐变画刷填充一个椭圆,当从椭圆的左边缘向右边缘移动时画笔颜色会由蓝变绿。

【实例8-11】  使用渐变画刷填充图形。

  1. Graphics myGraphics = label1.CreateGraphics();  
  2. Pen pen = new Pen(Color.Red, 3);  
  3. myGraphics.DrawEllipse(pen, 25, 10, 260, 150);  
  4.  
  5. Rectangle myRectangle = new Rectangle(25, 10, 260, 150);  
  6. // 创建渐变画刷,颜色水平从左到右由蓝变到绿  
  7. LinearGradientBrush myLinearGradientBrush = new LinearGradientBrush(  
  8.                 myRectangle,  
  9.                 Color.Blue,  
  10.                 Color.Green,  
  11.                 LinearGradientMode.Horizontal);  
  12. // 使用渐变画刷填充椭圆  
  13. myGraphics.FillEllipse(myLinearGradientBrush, myRectangle); 

运行结果如图8-16所示。

 
图8-16  使用渐变画刷填充图形
posted @ 2011-04-01 11:40  许明吉博客  阅读(14586)  评论(0编辑  收藏  举报