首页 > 解决方案 > 如何使用多色渐变禁用多边形中的中心颜色?

问题描述

我正在尝试为所有顶点仅使用两种颜色构建一个多边形。但是 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);

标签: winapigdi+

解决方案


您只需要计算中心点的颜色值。

取平均值(例如 (r1 + r2) / 2)。这对于淡化/加深颜色和创建渐变效果更好。

请参阅:RGB 值的加色混合算法

添加 :pathBrush.SetCenterColor(Color(0, 128*0.5, 192*0.5));

调试:

在此处输入图像描述


推荐阅读