【发布时间】:2019-01-08 23:25:43
【问题描述】:
回到这里。有什么办法可以提高Arc的质量吗?
我正在使用e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
这是创建弧的一段代码:
using (GraphicsPath gp = new GraphicsPath())
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
gp.Reset();
gp.AddPie(_OuterRectangle, (float)_Properties.Origin, (float)_Properties.GaugeType);
gp.Reverse();
gp.AddPie(_InnerRectangle, (float)_Properties.Origin, (float)_Properties.GaugeType);
gp.Reverse();
pArea.SetClip(gp);
using (Pen oPen = new Pen(this.ForeColor, 2f))
{
e.Graphics.DrawPath(oPen, gp);
}
e.Graphics.SetClip(ClientRectangle);
}
提前致谢。
编辑:
我已经按照 LarsTech 的建议做了,现在质量很完美,但我没有我需要的数字:
- OuterRectangle:是 ClientRectangle 区域,我正在对其进行操作以使 Width 和 Height 长度相同;
- InnerRectangle:是 OuterRectangle 的 ClientRectangle 面积的 2/3;
Properties.Origin:是弧开始的角度。我将它作为基点放在枚举器中,其中北为 270,东为 0,
所以。如上图,为西南,135度;Properties.GaugeType:是另一个枚举器,表示 if is Complete = 360、Half = 180、Quarter = 90,因此我可以确定扫描角度。如果数字是 ThreeQuarter,270 度。
【问题讨论】:
-
看起来您正在使用该图形路径进行剪辑。不能像这样剪辑区域,但仍然有抗锯齿工作。
-
不用剪裁,你可以只使用
_InnerRectangle,将其膨胀(-1,-1)并用画布的背景颜色填充(e.Graphics.FillEllipse())。这将在不影响抗锯齿(并避免进一步计算)的情况下消除饼线。 -
如果您指的是我的评论(LarsTech 没有提到
_InnerRectangle),我的意思是您可以在此处的代码中使用它来填充由AddPie设计的弧并删除AddPie正在生成的行:_InnerRectangle.Inflate(-1, -1); e.Graphics.FillEllipse([Brush from canvas.backcolor], _InnerRectangle);。然后,如果您出于其他原因想在其他地方使用它,那就无关紧要了。 -
@Jimi 我重新打开了这个问题(不太同意重复的问题),所以如果您想将其作为答案发布,请继续。
-
由于问题被重新打开,我可以在此处发布该代码示例。它实际上并不是一个答案,但如果您认为它 适合 ,我会将其移至此处。
标签: c# winforms graphics graphicspath