锯齿效果是绘图表面中像素的粒子化造成的。例如绘制一条对角线时,基于像素的本质只能是图形类似于对角线,如图阶梯状效果:
在绘制曲线和文本时也会出现这种问题,都是因为屏幕上的像素使图像呈现这个锯齿状效果。
反锯齿技术就是为了让绘制曲线、对角线和文本这样的图形操作获得更好的效果。反锯齿的原理是通过改变具有阶梯状效果的像素附近的像素修改颜色——在足够高的分辨率下就会得到较平滑的效果。如图:
事实上,虽然采用了这种技术,但只能缓解锯齿效果,不能完全消除。
示例:
Graphics g = e.Graphics;
//e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawBezier(new Pen(Brushes.Black, 5), 0, 0, 150, 150, 250, 150, 200, 300);
效果:
反注释这句:
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
效果:
这里把Graphics对象的SmoothingMode属性设置为AntiAlias。这个值是SmoothingMode枚举的一部分,别的值可以自己试试,它属于System.Drawing.Drawing2D命名空间。
下面是填充一个矩形的结果:
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
e.Graphics.FillRectangle(Brushes.Black, 1, 0, 5, 4);
边界像素的颜色有他们与在FillRectangle方法中定义的实际矩形的相交程度来决定的:
角像素与矩形有25%相交,所以颜色只包含25%的黑色。
边像素与矩形有50%相交,所以颜色包含50%的黑色。