WIN32 GDI+ 学习笔记(三):使用画刷(I)

来源:互联网 发布:普通票据打印软件 编辑:程序博客网 时间:2024/06/02 04:30

gdi+中的brush对象是用来填充一个封闭形状的内部,而且brush对象分为以下几种:

1.实心画刷

2.渐变画刷

3.阴影画刷

4.贴图画刷

5.路径画刷

(本文参考MSDN)

我们先认识一下前两种。


1.实心画刷(SolidBrush)

首先我们需要一个SolidBrush对象,其构造函数为SolideBrush(Color& color),所以我们只需要指定一种颜色就行了

例如:

SolidBrush b(Color(255,0,0));
graphics.FillRectangle(&b,10,10,100,100);


我们可以通过SetColor和GetColor方法来设置和获取画刷的颜色。


2.渐变画刷(LinearGradientBrush

LinearGradientBrush可以让你用渐变色来填充一个封闭图形。其构造函数有:


LinearGradientBrush(Point& point1,Point& point2,Color& color1,Color& color2);

LinearGradientBrush(PointF& point1,PointF& point2,Color& color1,Color& color2);

LinearGradientBrush(Rect& rect, Color& color1, Color& color2, LinearGradientMode mode);

LinearGradientBrush(RectF& rect, Color& color1, Color& color2, LinearGradientMode mode);

LinearGradientBrush(Rect& rect, Color& color1,Color& color2, REAL angle,BOOL isAngleScalable = FALSE);

LinearGradientBrush(RectF& rect, Color& color1,Color& color2, REAL angle,BOOL isAngleScalable = FALSE);


可能你一下子看到这么多构造函数会有点晕,实际上只有三种不同的方法,现在来分别了解一下

1.LinearGradientBrush(Point& point1,Point& point2,Color& color1,Color& color2);

这个构造方法需要两个点,两种颜色,举个例子:

LinearGradientBrush b(Point(0,0),Point(500,250),Color(255,0,0),Color(0,0,255));
graphics.FillRectangle(&b,0,0,500,250);


另外,如果画刷所填充的形状超出了渐变的分界线,那么就会出现下面的效果:


2.LinearGradientBrush(Rect& rect, Color& color1, Color& color2, LinearGradientMode mode);

这个方法需要一个矩形,两种颜色,以及一个渐变模式,其中渐变模式LinearGradientMode是一个枚举类型,包括:

LinearGradientModeHorizontal                  = 0
LinearGradientModeVertical             = 1
LinearGradientModeForwardDiagonal    = 2
LinearGradientModeBackwardDiagonal = 3 

效果如下:


3.LinearGradientBrush(Rect& rect, Color& color1,Color& color2, REAL angle,BOOL isAngleScalable = FALSE);

这个方法需要一个矩形,两种颜色,一个角度和一个标志,如果isAngleScalable为真那么会根据矩形来改变渐变的角度(详细信息请参见MSDN

效果图:



渐变画刷也有很多的方法,我在这里介绍几种常用的:

1.SetBlend(REAL *blendFactors,REAL *blendPositions,INT count);

blendFactors是实数数组,里面的数字的值从0.0到1.0,代表两种颜色的混合程度,0.0表示100%起始色,1.0表示100%终止色,而blendPositions也是实数数组,里面的数字代表blendFactors中对应混合颜色的位置,从0.0到1.0,代表0%到100%。count表示blendFactors和blendPositions中的元素个数。

举个例子:

REAL factors[4] = {0.0f, 0.4f, 0.6f, 1.0f};
REAL positions[4] = {0.0f, 0.2f, 0.8f, 1.0f};
Rect rect(0, 0, 500, 250);

LinearGradientBrush linGrBrush(rect,Color(255, 0, 0), Color(0, 0, 255), LinearGradientModeHorizontal);

linGrBrush.SetBlend(factors, positions, 4);
graphics.FillRectangle(&linGrBrush, rect);


2.SetInterpolationColors(Color *presetColors,REAL *blendPositions,INT count);

如果觉得颜色不够多,那么我们可以用这个方法来添加更多的颜色。presetColors是颜色数组,里面按顺序定义你想要的颜色,blendPositions是实数数组,里面的数字从0.0到1.0说明presetColors中对应颜色的位置,count为元素个数。

举个例子:

Color colors[] = {
      Color(255, 0, 0), 
      Color(0, 0, 255),  
      Color(0, 255, 0)}; 


REAL positions[] = {
      0.0f, 
      0.3f, 
      1.0f}; 


LinearGradientBrush linGrBrush(
      Point(0, 0), 
      Point(500, 0),
      Color(0, 0, 0), 
      Color(0, 0, 0)); 


linGrBrush.SetInterpolationColors(colors, positions, 3);
graphics.FillRectangle(&linGrBrush, 0, 0, 500, 300);


3.SetWrapMode(WrapMode wrapMode);

用这个方法可以设置渐变区域平铺的模式,WrapMode为枚举类型,包括:

WrapModeTile           = 0
WrapModeTileFlipX    = 1
WrapModeTileFlipY   = 2
WrapModeTileFlipXY = 3
WrapModeClamp      = 4

效果如图:


关于画刷就先讲这么多。

0 0
原创粉丝点击