使用.NET的System.Drawing.Graphics
GDI东西,我有两个点数组的形状。它们是下图中的红色和绿色像素。
现在我试图用一种颜色填充这个形状的内部。将其绘制为简单的线条就可以了。像这样:
g.DrawCurve(Pens.Red, points1);
g.DrawCurve(Pens.Green, points2);
给出左图像(1)。
alt text http://lisa.xms.se/wic/filled.png
要填写此内容,我尝试使用GraphicsPath
这样的内容:
GraphicsPath gp = new GraphicsPath();
gp.AddCurve(points1);
gp.AddCurve(points2);
g.FillPath(Brushes.Blue, gp);
它有效......有点儿。问题是当形状重叠时,如中间图像(2)中所示,并且不会填充重叠部分。
我尝试使用gp.widen()
获取大纲,然后填写:
gp.Widen(new Pen(Color.Blue, 3));
g.FillPath(Brushes.Blue, gp);
这应该可行,但它似乎只是填充外形状的3像素切片而不是整个形状,如图(3)所示。
任何想法如何解决这个问题?
答案 0 :(得分:4)
默认情况下,GraphicsPath使用FillMode.Alternate
枚举。
您需要FillMode.Winding
GraphicsPath gp = new GraphicsPath(FillMode.Winding);
绕组模式考虑每个交叉点处的路径段的方向。它为每个顺时针交点添加一个,并为每个逆时针交点减去一个。如果结果非零,则在填充或剪辑区域内考虑该点。零计数表示该点位于填充或剪辑区域之外。
更多信息here