Winapi 如何禁用多色渐变多边形中的中心颜色?

Winapi 如何禁用多色渐变多边形中的中心颜色?,winapi,gdi+,Winapi,Gdi+,我正试图建立一个多边形,只使用两种颜色的所有顶点。但是gdiplus库会自动插入一个混合了所有图形的白色中心色。我想禁用中心色,而不是使用SetCenterColor()在PathGradientBrush类中提供的解决方法。使用SetCenterPoint()将默认位置移动到远处位置非常不雅观。可能吗 谢谢 样本如下: CMyGDIPlus gdi(this); // use your class instead using namespace Gdiplus; Graphics &

我正试图建立一个多边形,只使用两种颜色的所有顶点。但是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);
cmygdlus gdi(this);//改用你的课
使用名称空间Gdiplus;
Graphics&Graphics=gdi.GetGraphics();
图形。设置平滑模式(平滑模式无);
Gdiplus::Rect gRect;
graphics.GetVisibleClipBounds(&gRect);
int i;
int colorSize=4;
斯帕斯路径;
点[4];
颜色颜色[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;
对于(i=0;i
您只需要计算中心点的颜色值

以平均值(例如(r1+r2)/2)。这对亮/暗颜色和创建渐变效果更好。

参考:

添加:
pathBrush.SetCenterColor(颜色(0,128*0.5192*0.5))

调试:


请具体说明您的问题,提供答案,并正确标记问题。它似乎与MFC毫无关系。如果这确实是关于GDI+的,你可能想添加标签。我想我已经足够具体了,因为我根本不想设置任何“中心颜色”,不管我的图纸是关于什么;我需要的梯度颜色只是从提供的顶点颜色为对方。API没有给出这个选项,我看到了很多程序员解决这个问题的示例,例如:没有发现类似的禁用中心点的情况。您提供的示例可能是最有效的方法,方法是计算CenterColor并设置CenterPoint..Street sun msft。是的,但是当我计算垂直线连接点的平均颜色(见图)时,它与路径中间存在的实际混合颜色不完全匹配。我们将伽马校正设置为“开”。。。