如何在 Java 中编程抗锯齿

How to program anti-aliasing in Java

我已经实现了用于简单线条绘制的 Bresenham 算法 class,现在我想对其设置抗锯齿,我使用 JavaFX 进行查看。

如何在不使用库的情况下实现抗锯齿?

消除锯齿的一种方法是使用过采样。图像以更高的解决方案呈现,其中通常为了效率和易于实现,生成的图像大了两倍,即二的幂。然后对生成的图像进行下采样。

一种更有效的方法(另一方面也有一些缺点)是 algorithm by Wu。在这种方法中,使用查找 table 来存储相邻像素的所需着色,其中使用子像素精度绘制像素。 Bresenham 的线算法然后使用此查找 table 来放置具有实际亚像素精度的像素。

后一种方法不需要下采样和可能更少的内存访问,但是如果线条交叉,则可能会出现 atrifacts,因为第二条线抵消了为第一条线绘制的像素。这种影响可以通过对像素使用饱和添加而不是替换来补救。