首先要注意Graphics 对象不包含任何图形;它是一个工具,可让您在相关位图(包括控件表面)上绘图。因此,更改其任何属性,例如 SmoothingMode 仅 会影响您从那时起绘制的图形,而不影响您之前绘制的任何内容。
圆圈肯定会有抗锯齿像素如果你会在在将SmoothingMode从默认None设置为@之后绘制它987654330@.
这条线是垂直的,所以它不需要抗锯齿,除了在它的末端有一些。但是,如果您将其倾斜或将其移动到 非整数 位置,则会显示抗锯齿功能!
让我们稍微修改一下你的代码,仔细看看结果:
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);
较小的圆圈有很多灰色像素,甚至原始的绿线也有较浅的顶端。两条新线现已完全消除锯齿,一条是因为它是倾斜的,另一条是因为它位于“像素之间”。
顺便说一句:如果打开它,当您的 Pen.Width 为 偶数 或 非整数 数字。后者的原因应该是显而易见的;前者来自PenAlignment 属性。它的默认Center 尝试将笔居中,但不是在像素边界,而是在坐标像素的中心。因此,只有 不均匀 的宽度会完全填充像素并且不会导致抗锯齿。对于闭合形状,您可以通过将Pen.Alignment 更改为Inset 来更改此行为:
此属性决定 Pen 如何绘制闭合曲线和
多边形。 PenAlignment 枚举指定了五个值;
然而,只有两个值——Center 和 Inset——会改变外观
的画线。 Center 是该属性的默认值,并且
指定画笔的宽度以
曲线或多边形。此属性的 Inset 值指定
笔的宽度在曲线或多边形的轮廓内。这
其他三个值,Right、Left 和 Outset,将生成一支笔
居中。
将对齐设置为 Inset 的 Pen 将产生不可靠的
结果,有时在插入位置绘制,有时在
居中位置。此外,内嵌笔不能用于绘制复合
线,不能用三角形破折号画虚线。
PS:问题不在于如何正确地绘制,所以请注意,您永远不应该使用@来绘制987654337@,因为这始终只会导致非持久图形。相反,您需要使用Paint 事件及其e.Graphics 对象..