背景
路径是一系列相互连接的直线和曲线,由许多不同类型的点所构成,用于表示复杂的不规则图形, GraphicsPath 类表示。
路径渐变画刷允许设置颜色从中心向边界渐变的画刷,可以设置中心点颜色和边界点的颜色。
构建路径渐变画刷
①.使用路径构建
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
Pen m_pen(Color::Blue,2);
SolidBrush m_Brush(Color::Green);
GraphicsPath m_Path;//构造空路径
m_Path.AddEllipse(30, 30, 180, 120);//添加椭圆
PathGradientBrush pathBrush(&m_Path);//使用路径创建画刷
pathBrush.SetCenterColor(Color::Red);//设置中心颜色
Color colors[] = { Color::Green ,Color::Green};
int count = 1;
pathBrush.SetSurroundColors(colors, &count);//设置边界颜色
graphics.FillEllipse(&pathBrush, 30, 30, 180, 120);
}
②.使用点构建
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
Pen m_pen(Color::Blue,2);
SolidBrush m_Brush(Color::Green);
Point points[] = { Point(30, 30), Point(180, 30), Point(180, 150), Point(30, 150) };
PathGradientBrush pathBrush(points,4);//使用点创建画刷
pathBrush.SetCenterColor(Color::Red);//设置中心颜色
Color colors[] = { Color::Green ,Color::Black,Color::Yellow,Color::Blue};
int count = 4;
pathBrush.SetSurroundColors(colors, &count);//设置边界颜色
graphics.FillRectangle(&pathBrush, 30, 30, 150, 120);
}
聚焦和缩放
①.概述
聚焦缩放用于指定位于主轨迹内部的内部轨迹,中心颜色填充整个内部轨迹范围,而不是只显示在中心点。可以调用 SetFocusScales 方法来设置 一个路径渐变画刷的聚焦缩放。
②.设置聚焦缩放
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
Pen m_pen(Color::Blue, 2);
SolidBrush m_Brush(Color::Green);
GraphicsPath m_Path;//构造空路径
m_Path.AddEllipse(30, 30, 180, 120);//添加椭圆
PathGradientBrush pathBrush(&m_Path);//使用路径创建画刷
pathBrush.SetCenterColor(Color::Red);//设置中心颜色
Color colors[] = { Color::Green ,Color::Green };
int count = 1;
pathBrush.SetSurroundColors(colors, &count);//设置边界颜色
pathBrush.SetFocusScales(0.3f, 0.3f);//设置聚焦缩放
graphics.FillEllipse(&pathBrush, 30, 30, 180, 120);
}
插值颜色
①.概述
使用插值颜色数组可以实现从路径边界到中心点进行多种颜色进行渐变。
②.使用插值颜色渐变
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
Pen m_pen(Color::Blue, 2);
SolidBrush m_Brush(Color::Green);
GraphicsPath m_Path;//构造空路径
m_Path.AddRectangle(Rect(30,30,180,120));//添加矩形
PathGradientBrush pathBrush(&m_Path);//使用路径创建画刷
Color colors[] = {Color(255, 0, 128, 0),Color(255, 0, 255, 255),Color(255, 0, 0, 255) };
REAL positions[] = {0.0f, 0.5f, 1.0f };
pathBrush.SetInterpolationColors(colors, positions, 3);
graphics.FillRectangle(&pathBrush, 30, 30, 180, 120);
}
其他参数设置
①.中心点设置
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
Pen m_pen(Color::Blue, 2);
SolidBrush m_Brush(Color::Green);
GraphicsPath m_Path;//构造空路径
m_Path.AddEllipse(30, 30, 180, 120);//添加椭圆
PathGradientBrush pathBrush(&m_Path);//使用路径创建画刷
pathBrush.SetCenterColor(Color::Red);//设置中心颜色
Color colors[] = { Color::Green ,Color::Green };
int count = 1;
pathBrush.SetSurroundColors(colors, &count);//设置边界颜色
pathBrush.SetCenterPoint(Point(150, 75));
graphics.FillEllipse(&pathBrush, 30, 30, 180, 120);
}
②.使用灰度矫正
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
Pen m_pen(Color::Blue, 2);
SolidBrush m_Brush(Color::Green);
GraphicsPath m_Path;//构造空路径
m_Path.AddEllipse(30, 30, 180, 120);//添加椭圆
PathGradientBrush pathBrush(&m_Path);//使用路径创建画刷
pathBrush.SetCenterColor(Color::Red);//设置中心颜色
Color colors[] = { Color::Green ,Color::Green };
int count = 1;
pathBrush.SetSurroundColors(colors, &count);//设置边界颜色
pathBrush.SetGammaCorrection(true);//使用灰度矫正
graphics.FillEllipse(&pathBrush, 30, 30, 180, 120);
}