首先应该指出的是Graphics
对象不contain任何图形;它是一个tool它允许您在相关位图上绘图,包括控件的表面。因此改变它的任何属性,比如SmoothingMode
only影响你绘制的图形从那时起,不是你画的任何东西before..
圈子肯定是would有抗锯齿像素if你会画它after设置SmoothingMode
从其默认值None
to AntiAlias
.
该线是vertical,所以它不需要抗锯齿,除了在它的末端,在那里is一些。但如果你倾斜它或将它移动到非整数抗锯齿位置将会显示!
让我们稍微修改一下代码并仔细查看结果:
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);
![enter image description here](https://i.stack.imgur.com/X1OfB.png)
![enter image description here](https://i.stack.imgur.com/xNpPP.png)
较小的圆圈有许多灰色像素,甚至原始的绿线也有较浅的顶端。两条新线现在已完全消除锯齿,一条是因为它是倾斜的,另一条是因为它位于像素“之间”。
顺便说一句:如果它打开你会also当您的Pen.Width
is even或者当它是一个非整数数字。后者的原因应该是显而易见的;前者来自PenAlignment财产。它的默认值Center
尝试将笔居中,但不是在像素边界处,而是在坐标像素的中心处。因此只有一个unevenwidth 将完全填充像素并且不会导致抗锯齿。为了闭合形状您可以通过更改来更改此行为Pen.Alignment
to Inset
:
此属性决定笔如何绘制闭合曲线以及
多边形。 PenAlignment 枚举指定五个值;
但是,只有两个值(Center 和 Inset)会改变外观
的一条画线。 Center 是该属性的默认值,
指定画笔的宽度以轮廓线为中心
曲线或多边形。此属性的 Inset 值指定
笔的宽度在曲线或多边形的轮廓内部。这
其他三个值,Right、Left 和 Outset,将产生一支笔
是居中的。
将对齐方式设置为“插入”的笔将产生不可靠的结果
结果,有时在插入位置绘制,有时在
居中位置。此外,不能使用插入笔绘制复合图
线,并且无法使用三角形破折号绘制虚线。
PS:问题不在于如何画properly,所以让我注意到你never应该使用control.CreateGraphics
因为这总是只会导致非持久图形。相反,您需要使用Paint
事件及其e.Graphics
目的..