主要有四种方法:

  • wupixel:wu xiaolin提出的最早的绘制直线和圆的平滑方法,优点是简单快速,缺点是只有一个方向的像素偏移被考虑了,效果普通,而且只能绘制1个像素宽度的直线,超过一个像素后,两个端点就会非常不自然。

image

  • supersampling:解析度扩大数倍绘制,四个或者多个像素合并平滑成一个像素,优点是效果好,缺点是计算量大,多用于显卡加速,cpu基本没发做,显卡负担也大:

image
当然小范围的ss可以用来改进界面字体效果,如windows字体长宽扩大两倍绘制后再平滑down sample成小尺寸,四个像素点均匀合并成一个像素点,会好看很多。

image

  • 覆盖面积计算:通过计算多边形覆盖了矩形点阵面积的百分比来计算 Alpha,多用于软件渲染,字体绘制,如高质量图形库如AGG,采用直接子像素的绘制方式来避免supersampling的性能浪费,并达到更好效果。缺点是过于复杂不如supersampling 那样简单直接,不容易的用gpu实现。

image

比如我五年前做的一个玩具图形库:skywind3000/pixellib · GitHub
就是用覆盖面积计算方式来平滑边缘。

  • clear type:采用子像素并考虑lcd的rgb分布,利用lcd上rgb的排列规则模拟更高的解析度,缺点是过分依赖lcd排列,以及主要是x方向的抗锯齿:

image

编辑于 2015-04-26