GDI+ 中路径渐变画刷的使用

背景

路径是一系列相互连接的直线和曲线,由许多不同类型的点所构成,用于表示复杂的不规则图形, 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);
}

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值