gpt4 book ai didi

c# - 如何用重叠曲线填充 GraphicsPath?

转载 作者:行者123 更新时间:2023-11-30 21:23:26 24 4
gpt4 key购买 nike

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

有什么解决办法吗?

最佳答案

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

GraphicsPath gp = new GraphicsPath(FillMode.Winding);

蜿蜒模式考虑了每个交叉点路径段的方向。它为每个顺时针交叉点加一,并为每个逆时针交叉点减去一个。如果结果不为零,则认为该点在填充或裁剪区域内。零计数意味着该点位于填充或剪辑区域之外。

更多信息 here

关于c# - 如何用重叠曲线填充 GraphicsPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com