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对象作为参数之一被传递到填充方法。例如用纯红色填充椭圆:
- 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-13 阴影样式的图形 |
在下面的实例中,绘制了一个圆形,它是使用交叉阴影画刷填充的。
【实例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所示。
图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所示。
图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所示。
图8-16 使用渐变画刷填充图形 |