通过使用渲染提示显示抗锯齿的文本

Java 2D 文本渲染可能会受到“渲染提示”的影响。

回想一下,最重要的文本绘制方法如下:

Graphics.drawString(String s, int x, int y);

通常,此方法在具有纯色的文本字符串 中绘制每个字形,并且将该字形中“打开”的每个像素都设置为该颜色。这种类型的图形产生最高对比度的文本,但有时带有锯齿状(锯齿状)的边缘。

文本抗锯齿是一种用于平滑屏幕上文本边缘的技术。 Java 2D API 使应用程序可以通过将文本呈现提示应用于Graphics来指定是否应使用此技术以及使用哪种算法。

最常见的渲染提示是将前景(文本)颜色与文本边缘的屏幕背景像素混合在一起。要请求此提示,应用程序必须调用以下内容:

graphics2D.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

下图说明了抗锯齿功能。

此图表示 Hello World 字符串 的抗锯齿提示。

如果使用不当,此方法会使文本显得过于模糊。在这种情况下,可以使用以下更好的提示:

graphics2D.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);

此方法自动使用字体本身中的信息来决定是使用抗锯齿还是使用纯色。

LCD 显示器具有 Java 2D API 可用来产生文本的特性,该文本不像典型的抗锯齿那样模糊,但是在小尺寸时更容易辨认。若要请求在典型的 LCD 显示器上使用亚像素 LCD 文本 Pattern 绘制文本,应用程序必须调用以下命令:

graphics2D.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

下面表示的代码示例按以下 Sequences 说明了抗锯齿功能:

  • 抗锯齿功能已关闭。

  • 抗锯齿功能已启用。

  • 使用TEXT_ANTIALIAS_GASP提示进行抗锯齿。

Note:

因此,GASP 表指定仅使用这些大小的提示,而不使用“平滑”。因此,在许多情况下,结果文本显示等效于VALUE_TEXT_ANTIALIAS_OFF

  • 使用TEXT_ANTIALIAS_LCD_HRGB提示进行抗锯齿。

Note:

如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)7版本。

此 Servlets 的完整代码在AntialiasedText.java中。