首页 > 代码库 > GDI+学习笔记(六)渐变画刷

GDI+学习笔记(六)渐变画刷


画刷,顾名思义,就是像画刷一样,向设备上绘制,还记得小时候常唱的首歌,"我是一个粉刷匠.." 好吧,跑题了。


本系列博客希望尽可能简单的描述每项功能,而不希望把每个参数都介绍的详详细细,如果需要,请查阅msdn,本节讲述的渐变画刷,主要有两种,一种是叫线性画刷(LinearGradientBrush),还有一种叫路径画刷(PathGradientBrush),我希望以一种尽可能简单的方式去描述它,但能力有限,所以有什么意见,希望各位能帮忙提出,谢谢。


(一)使用画刷

上一节中,我们实际上实现了上中下三个面,然后所有的内容都会绘制上一种颜色或者一张图片。而绘制颜色其实本质上就是一种特殊的画刷,而这里我们将使用更高级的画刷--渐变的画刷来取代它们。

因此,我们本节的工作,就是要取代上一节中graphics.clear()的工作。其他的与上节内容没有任何区别。


(二)线性画刷

我们需要初始化一个线性画刷,代码如下:

		LinearGradientBrush *lgb = new LinearGradientBrush(Point(0,0), Point(100,0),
			Color::Blue, Color::Green);

简单说明一下参数,前两个参数,是两个点,这两个点组成了方向向量,唯一标记了渐进的方向。

后面两个参数,是两个颜色,指的是开始和结束的两个点的颜色。如果我们希望中间增加几组呢?我们可以设置插值,具体可以查阅GDI+的API函数:SetInterpolationColors。


然后,我们填充一下Graphics就可以了,代码如下:

bmpGraphics.FillRectangle(lgb, 0, 0, 100, 100);

ok,看看效果:



(三)路径画刷

相对比线性画刷,路径画刷就稍微复杂一点。它同样是一种渐进变化的画刷,但它是从一个闭合路径的中心点向路径中渐变的一种画刷。闭合路径的中心点默认是路径的几何中心,当然我们也可以通过SetCenterPoint来进行中心点的设置。

既然如此,那么我们首先需要定义一个闭合路径,这里我们定义一个正方形

		GraphicsPath *gp = new GraphicsPath;
		Point p[] = {
			Point(0,0),Point(100,0),Point(100,100),Point(0,100)
		};
		gp->AddLines(p, 4);

然后,用这个正方形为路径渐进画刷初始化

		PathGradientBrush *pgb = new PathGradientBrush(gp);

这之后,我们还需要设置中心的颜色和四周的颜色。

		pgb->SetCenterColor(Color::White);

		Color surroundColors[] = {
			Color::Red,
			Color::Green,
			Color::Blue,
			Color::Yellow
		};
		int nCount = 4;
		pgb->SetSurroundColors(surroundColors, &nCount);
最后,填充路径

bmpGraphics.FillPath(pgb, gp);

至此,我们就完成了渐进画刷的绘制,只需要按照上节的内容,将其会知道hdc对应的graphics中即可,看看效果:



(四)在正方体上使用渐进画刷

只需要将上述内容会知道正方体上的三个面即可,直接看看效果吧:



(五)其他说明

有很多细节的操作,还需要具体使用中多多尝试,才能更熟练的使用。