如何用重叠曲线填充GraphicsPath?

时间:2009-11-23 19:48:58

标签: c# .net graphics gdi+

使用.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)所示。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

默认情况下,GraphicsPath使用FillMode.Alternate枚举。 您需要FillMode.Winding

GraphicsPath gp = new GraphicsPath(FillMode.Winding);

绕组模式考虑每个交叉点处的路径段的方向。它为每个顺时针交点添加一个,并为每个逆时针交点减去一个。如果结果非零,则在填充或剪辑区域内考虑该点。零计数表示该点位于填充或剪辑区域之外。

更多信息here