Mar*_*man 2 .net c# graphics gdi+
使用 .NET 的System.Drawing.GraphicsGDI 东西,我有一个由两个点数组组成的形状。它们是下图中的红色和绿色像素。
现在我试图用颜色填充这个形状的内部。把它画成简单的线条就可以了。像这样:
g.DrawCurve(Pens.Red, points1);
g.DrawCurve(Pens.Green, points2);
Run Code Online (Sandbox Code Playgroud)
这给出了左图 (1)。
替代文本 http://lisa.xms.se/wic/filled.png
为了填充这个东西,我尝试使用GraphicsPath这样的:
GraphicsPath gp = new GraphicsPath();
gp.AddCurve(points1);
gp.AddCurve(points2);
g.FillPath(Brushes.Blue, gp);
Run Code Online (Sandbox Code Playgroud)
它有效......有点。问题是当形状重叠时,如中间图像 (2) 所示,并且不会填充重叠部分。
我尝试使用gp.widen()来获取轮廓,然后填充:
gp.Widen(new Pen(Color.Blue, 3));
g.FillPath(Brushes.Blue, gp);
Run Code Online (Sandbox Code Playgroud)
这应该可行,但它似乎只填充了形状外部的3 像素切片,而不是整个形状,如图 (3) 所示。
有什么想法如何解决这个问题吗?
默认情况下,GraphicsPath 使用FillMode.Alternate枚举。你需要FillMode.Winding
GraphicsPath gp = new GraphicsPath(FillMode.Winding);
Run Code Online (Sandbox Code Playgroud)
缠绕模式考虑每个交叉点处路径段的方向。它为每个顺时针交叉点加一,并为每个逆时针交叉点减一。如果结果非零,则该点被视为在填充或剪切区域内。零计数意味着该点位于填充或剪切区域之外。
更多信息请点击此处