当前位置:C++技术网 > 资讯 > 路径渐变画刷深入

路径渐变画刷深入

更新时间:2015-11-28 22:10:32浏览次数:1+次

同线性渐变画刷相比,路径渐变画刷的最大特点在于:路径渐变画刷的渐变方向是从路径中央到路径边缘,是一种呈发散状的渐变,而线性渐变画刷的渐变方向较为单一(水平,垂直,固定角度)。所以,在使用路径渐变画刷填充目标区域之前,除了需要指定路径对象外,还需要指定路径的中心色彩(起点色)和路径的边界色(终点色)。默认情况下。路径渐变画刷的中心色彩被设置为黑色,而边界色是由一个数组指定的。因此,路径渐变画刷可以完成的渐变效果是多样化的,灵活的。

只见创建一个单文档工程,GDI+的必要代码我就不说了,你可以在《路径渐变画刷初接触》中找到。在菜单中新建一个菜单项,

并在该菜单项中引入一个子菜单项,建立消息响应(有不懂的地方,请联系我):

void CPathGradientBrshView::OnBrushpathstart()
{
	// TODO:  在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	Pen pen(Color::Black, 1);
	/////定义五星的边线坐标
	Point points[] = {
		Point(75, 0), Point(100, 50),
		Point(150, 50), Point(112, 75),
		Point(150, 150), Point(75, 100),
		Point(0, 150), Point(37, 75),
		Point(0, 50), Point(50, 50),
	};
	GraphicsPath path;
	path.AddLines(points, 10);
	/////构造路径渐变画刷
	PathGradientBrush pthGrBrush(&path);
	/////设置中心点色彩(起点色彩)
	pthGrBrush.SetCenterColor(Color(255, 255, 0, 0));
	/////设置每个端点的色彩(终点色彩)
	Color colors[] = {
		Color(255, 0, 0, 0), Color(255, 0, 255, 0),
		Color(255, 0, 0, 255), Color(255, 255, 255, 255),
		Color(255, 0, 0, 0), Color(255, 0, 255, 0),
		Color(255, 0, 0, 255), Color(255, 255, 255, 255),
		Color(255, 0, 0, 0), Color(255, 0, 255, 0)
	};
	int count = 10;
	/////将端点的色彩应用在边界上
	pthGrBrush.SetSurroundColors(colors, &count);
	graphics.FillPath(&pthGrBrush, &path);
	//srand((unsigned)time(NULL));
	for (int z = 0; z < 3; z++)
	{
		colors[z] = RGB(rand() % 255, rand() % 155, rand() % 55);
		graphics.TranslateTransform(200, 0);
		pthGrBrush.SetCenterColor(Color(rand() % 255, rand() % 255, rand() % 255));
		pthGrBrush.SetSurroundColors(colors, &count);
		graphics.FillPath(&pthGrBrush, &path);
	}
}
代码实现:

在这里尤其注意SetSurroundColors函数,我们注释掉它(第一个SetSurroundColors函数)。代码运行:

相比较之前的图片,你发现了没有,没有了边框色,而且,色彩单一(看第一张图片)!这个函数就是结合SetCenterColor函数来实现路径填充,回想路径渐变画刷填充原理---路径渐变画刷的渐变方向是从路径中央到路径边缘,是一种呈发散状的渐变。画刷的渐变方向反映出颜色的变化,而颜色的变化就是上面两个函数运行的结果。

对于后面三个五角星,你多次点击路径渐变示例下的子菜单项,就会有不同的颜色显示。这是因为rand()函数随机生成不同的颜色。诺: