我正在尝试找到在C#中绘制多边形的最佳方法,其边缘逐渐融入背景颜色。我正在将多边形绘制到位图,所以目前我正在使用System.Drawing中的Graphics类。
多边形将是一个混合蒙版,我没有任何问题可以绘制黑色和白色的polgons。但是我想让它们在一定数量的像素上逐渐在两种颜色之间转换,比方说50像素(应该指定那个尺寸)。
我遇到了PathGradiantBrush,但我找不到指定过渡区大小的方法。使用该画笔,过渡似乎取决于多边形的大小和形状,而不是固定大小。
绘制此类多边形的最佳方法是什么?
答案 0 :(得分:1)
正如您在其他答案中所看到的,渐变画笔确实用居中渐变填充路径或多边形;你可以设置中心点,但它们仍然不会真正遵循多边形的边缘:
您可以通过创建ColorBlend
前往Transparent
和Positions
来影响每个色带的相对宽度,就像我对上述结果所做的那样,但是对于egdes的角度朝向中心点,它们与边界矩形的距离仍将决定它们的绝对宽度。对于多色渐变画笔示例see here!
因此,除非您的多边形几乎是圆形,否则您需要采用不同的方式。
这是一个解决方案,它将遵循边缘:
使用GraphicsPath path
(或简称为Point
数组)和Graphics
对象g
,首先填充背景颜色,然后使用笔绘制路径在宽度和透明度上增长。为了保持外边缘和不透明,我设置了Pen.Alignment = PenAlignment.Inset
。你可以玩数字,当然..:
g.FillPath(Brushes.MediumSeaGreen, path);
int ew = 8; // edge width
for (int i = 0; i < ew ; i++)
using (Pen pen = new Pen(Color.FromArgb(255 - i * 255 / ew, Color.DarkSlateBlue), i ))
{
pen.Alignment = PenAlignment.Inset;
g.DrawPath(pen, path);
}
请注意,左边缘看起来有点厚,但实际上并非如此。只是一种视错觉..
答案 1 :(得分:0)
我查看了MSDN上的Path Gradient Brush,发现了the FocusScales property,我相信它会尝试解决您遇到的问题。
以下是this page显示使用FocusScales的示例:
// Create a path that consists of a single ellipse.
GraphicsPath path;
path.AddEllipse(0, 0, 200, 100);
// Create a path gradient brush based on the elliptical path.
PathGradientBrush pthGrBrush(&path);
pthGrBrush.SetGammaCorrection(TRUE);
// Set the color along the entire boundary to blue.
Color color(Color(255, 0, 0, 255));
INT num = 1;
pthGrBrush.SetSurroundColors(&color, &num);
// Set the center color to aqua.
pthGrBrush.SetCenterColor(Color(255, 0, 255, 255));
// Use the path gradient brush to fill the ellipse.
graphics.FillPath(&pthGrBrush, &path);
// Set the focus scales for the path gradient brush.
pthGrBrush.SetFocusScales(0.3f, 0.8f);
// Use the path gradient brush to fill the ellipse again.
// Show this filled ellipse to the right of the first filled ellipse.
graphics.TranslateTransform(220.0f, 0.0f);
graphics.FillPath(&pthGrBrush, &path);
输出的一个例子: