作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 .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/
我是一名优秀的程序员,十分优秀!