画笔和填充形状

封闭的图形(如矩形或椭圆形)由轮廓和内部组成。 轮廓是用 对象绘制的,内部用 Brush 对象填充。 Windows GDI+ 提供了多个用于填充闭合图形内部的画笔类: SolidBrushHatchBrushTextureBrushLinearGradientBrushPathGradientBrush。 所有这些类都继承自 Brush 类。 下图显示了用纯色画笔填充的一个矩形以及用阴影线画笔填充的一个椭圆形。

显示蓝色矩形和洋红色椭圆填充蓝色阴影图案的插图

 

纯色画笔

若要填充闭合的形状,需要一个 Graphics 对象和一个 Brush 对象。 Graphics 对象提供 FillRectangleFillEllipse 等方法,Brush 对象存储填充的属性,如颜色和图案。 Brush 对象的地址作为参数之一传递给填充方法。 以下示例用纯红色填充椭圆。

SolidBrush mySolidBrush(Color(255, 255, 0, 0));
myGraphics.FillEllipse(&mySolidBrush, 0, 0, 60, 40);

请注意,在前面的示例中,画笔的类型为 SolidBrush,它继承自 Brush

阴影线画笔

使用阴影线画笔填充形状时,可以指定前景色、背景色和阴影线样式。 前景色是阴影线的颜色。

HatchBrush myHatchBrush(
   HatchStyleVertical, 
   Color(255, 0, 0, 255),
   Color(255, 0, 255, 0));

GDI+ 提供了在 HatchStyle 中指定的 50 多种阴影样式。 下图中显示的三种样式是 Horizontal、ForwardDiagonal 和 Cross。

显示三个青色椭圆的插图,每个椭圆都有不同的舱口样式

 

纹理画笔

通过纹理画笔,可以使用位图中存储的图案来填充形状。 例如,假设下图存储在名为 MyTexture.bmp 的磁盘文件中。

填充了各种颜色的小正方形的屏幕截图

以下示例通过重复存储在 MyTexture.bmp 中的图片来填充椭圆形。

Image myImage(L"MyTexture.bmp");
TextureBrush myTextureBrush(&myImage);
myGraphics.FillEllipse(&myTextureBrush, 0, 0, 100, 50);

下图显示了填充的椭圆形。

显示用以前定义的模式填充的椭圆的插图

 

渐变画笔

可以使用渐变画笔用颜色填充形状,该颜色从形状的一部分逐渐变为另一部分。 例如,水平渐变画笔将在你从图形左侧移动到右侧时更改颜色。 以下示例用水平渐变画笔填充椭圆形,该画笔从椭圆的左侧移动到右侧时,该画笔从蓝色变为绿色。

LinearGradientBrush myLinearGradientBrush(
   myRect,
   Color(255, 0, 0, 255),
   Color(255, 0, 255, 0),
   LinearGradientModeHorizontal);
myGraphics.FillEllipse(&myLinearGradientBrush, myRect); 

下图显示了填充的椭圆形。

显示带渐变填充的椭圆的插图:右侧为蓝色,左侧为绿色

可以将路径渐变画笔配置为在从图形中心向边界移动时更改颜色。

中心为深蓝色的椭圆,边缘为浅蓝色

路径渐变画笔非常灵活。 下图中用于填充三角形的渐变画笔逐渐从中心的红色变为顶点处三种的不同颜色。

中心为红色的三角形的插图,每个顶点处的底纹为不同颜色