C# 添加抗锯齿
我正在尝试使用抗锯齿,但我不知道为什么它不起作用:C# 添加抗锯齿,c#,winforms,C#,Winforms,我正在尝试使用抗锯齿,但我不知道为什么它不起作用: { Pen pen = new Pen(Color.Black, 3); Pen r = new Pen(Color.YellowGreen, 3); Graphics b = panel2.CreateGraphics(); b.DrawEllipse(pen, 6, 0, 90, 90); b.SmoothingMode = SmoothingMode.
{
Pen pen = new Pen(Color.Black, 3);
Pen r = new Pen(Color.YellowGreen, 3);
Graphics b = panel2.CreateGraphics();
b.DrawEllipse(pen, 6, 0, 90, 90);
b.SmoothingMode = SmoothingMode.AntiAlias;
b.DrawLine(r, new Point(50, 90), new Point(50, 0));
}
首先应该注意,
图形
对象不包含任何图形;它是一个工具,可用于绘制相关位图,包括控件的曲面。因此,更改其任何属性,如平滑模式
,只会影响从那时起绘制的图形,而不会影响以前绘制的任何图形
如果将平滑模式
从默认的无
设置为抗锯齿
,则圆肯定会具有抗锯齿像素
这条线是垂直的,所以它不需要抗锯齿,除了在它的末端,那里有一些。但是,如果将其倾斜或移动到非整数位置,将显示抗锯齿
让我们稍微修改一下代码并仔细查看结果:
Pen pen = new Pen(Color.Black, 3);
Pen r = new Pen(Color.YellowGreen, 3);
Graphics b = panel2.CreateGraphics();
b.DrawEllipse(pen, 6, 6, 90, 90);
b.SmoothingMode = SmoothingMode.AntiAlias;
b.DrawLine(r, new Point(50, 90), new Point(50, 0));
b.DrawLine(r, new Point(60, 90), new Point(70, 0));
b.DrawLine(r, new PointF(40.5f, 90), new PointF(40.5f, 0));
b.DrawEllipse(pen, 6, 6, 30, 30);
较小的圆有许多灰色像素,甚至原始绿线的顶端也较亮。这两条新线现在完全消除了锯齿,一条是因为它倾斜,另一条是因为它位于像素之间
顺便说一句:如果它被打开,当你的笔的宽度是偶数或是非整数时,你也将看到反序列化。后者的原因应该是显而易见的;前者来自于财产。默认的Center
尝试使笔居中,但不是在像素边界,而是在坐标像素的中心。因此,只有不均匀的宽度将完全填充像素,而不会导致抗锯齿。对于闭合形状,您可以通过将画笔对齐
更改为插入
来更改此行为:
此属性确定画笔绘制闭合曲线和曲线的方式
多边形。PenAlignment枚举指定五个值;
但是,只有两个值“居中”和“插入”将更改外观
指一条划出的线。“中心”是此属性的默认值,并且
指定画笔的宽度以画笔的轮廓为中心
曲线或多边形。此属性的Inset值指定
笔的宽度在曲线或多边形的轮廓内。这个
其他三个值(Right、Left和start)将生成
是居中的
将对齐设置为“插入”的笔将产生不可靠的结果
结果,有时在插入位置绘制,有时在
居中位置。此外,插入笔不能用于绘制合成图
直线,不能使用三角形虚线帽绘制虚线
PS:问题不在于如何正确地绘制,所以我要指出的是,您永远不应该使用控件来绘制图形。创建图形
,因为这只会导致非持久性图形。相反,您需要使用Paint
事件及其e.Graphics
对象