winapi - 如何使用多色渐变禁用多边形中的中心颜色?
问题描述
我正在尝试为所有顶点仅使用两种颜色构建一个多边形。但是 gdiplus 库会自动插入一个白色中心颜色混合所有图形。我想禁用中心颜色SetCenterColor()
,而不是通过在PathGradientBrush
课堂上使用来解决它。将默认位置移动SetCenterPoint()
到很远的位置是非常不雅的。那可能吗?
谢谢
示例如下:
CMyGDIPlus gdi(this); // use your class instead
using namespace Gdiplus;
Graphics & graphics = gdi.GetGraphics();
graphics.SetSmoothingMode(SmoothingModeNone);
Gdiplus::Rect gRect;
graphics.GetVisibleClipBounds(&gRect);
int i;
int colorSize = 4;
GraphicsPath path;
Point arrPoint[4];
Color arrColors[4];
arrPoint[0].X = gRect.GetLeft();
arrPoint[0].Y = gRect.GetTop();
arrPoint[1].X = gRect.GetRight();
arrPoint[1].Y = gRect.GetTop()+100;
arrPoint[2].X = gRect.GetRight();
arrPoint[2].Y = gRect.GetBottom();
arrPoint[3].X = gRect.GetLeft();
arrPoint[3].Y = gRect.GetBottom()-100;
for(i = 0; i < colorSize; i++)
{
if(i < 2)
arrColors[i].SetFromCOLORREF(RGB(0, 128, 0)); // green
else
arrColors[i].SetFromCOLORREF(RGB(0, 0, 192)); // blue
}
path.AddLines(arrPoint, 4);
PathGradientBrush pathBrush(&path);
pathBrush.SetSurroundColors(arrColors, &colorSize);
pathBrush.SetGammaCorrection(TRUE);
graphics.FillPath(&pathBrush, &path);
解决方案
您只需要计算中心点的颜色值。
取平均值(例如 (r1 + r2) / 2)。这对于淡化/加深颜色和创建渐变效果更好。
请参阅:RGB 值的加色混合算法
添加 :pathBrush.SetCenterColor(Color(0, 128*0.5, 192*0.5));
调试:
推荐阅读
- java - 新列表();
- spring - sprint boot - redis 键分隔符
- arrays - 设置可见性槽属性不起作用 actionscript 3.0
- android - Swipte to Refresh 不断添加 TextViews
- hive - 在 Hive 表中重命名名称为 count( distinct( id )) 的列
- sql - 使用 DATEADD 后如何转换值
- java - JUnit 5 是否支持按字母顺序或任何类似功能执行测试方法?
- asp.net-mvc - 如何将值从 PartialView 传递到 View ASP.NET MVC
- c# - 如何使用 Confluent.Kafka .Net 客户端创建 Kafka 主题
- c# - 使用 IEnumerable 初始化的 HashSet 包含重复元素