658.md 2.9 KB
Newer Older
W
init  
wizardforcel 已提交
1 2 3 4
# 使用渲染提示显示抗锯齿文本

> 原文: [https://docs.oracle.com/javase/tutorial/2d/text/renderinghints.html](https://docs.oracle.com/javase/tutorial/2d/text/renderinghints.html)

W
wizardforcel 已提交
5
Java 2D 文本渲染可能受*渲染提示*的影响。
W
init  
wizardforcel 已提交
6 7 8

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

W
wizardforcel 已提交
9
```java
W
init  
wizardforcel 已提交
10 11 12 13 14 15
Graphics.drawString(String s, int x, int y);

```

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

W
wizardforcel 已提交
16
*文本抗锯齿*是一种用于平滑屏幕上文本边缘的技术。 Java 2D API 使应用程序能够指定是否应该使用此技术以及通过将文本呈现提示应用于`Graphics`来使用的算法。
W
init  
wizardforcel 已提交
17 18 19

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

W
wizardforcel 已提交
20
```java
W
init  
wizardforcel 已提交
21 22 23 24 25 26 27 28
graphics2D.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

```

下图说明了抗锯齿功能。

W
wizardforcel 已提交
29
![This figure represents an antialiasing hint for the Hello World string.](img/bf6237ded1096f96cba33265b6b44e05.jpg)
W
init  
wizardforcel 已提交
30 31 32

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

W
wizardforcel 已提交
33
```java
W
init  
wizardforcel 已提交
34 35 36 37 38 39 40 41 42 43
graphics2D.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);

```

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

LCD 显示器具有 Java 2D API 可用于生成不像典型抗锯齿那样模糊但在小尺寸下更易读的文本的属性。要请求使用子像素 LCD 文本模式为典型的 LCD 显示器绘制文本,应用程序必须调用以下内容:

W
wizardforcel 已提交
44
```java
W
init  
wizardforcel 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
graphics2D.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

```

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

1.  抗锯齿是关闭的。
2.  Antialiasing 正在进行中。
3.  使用`TEXT_ANTIALIAS_GASP`提示进行抗锯齿处理。

    * * *

    **注意:**因此,GASP 表指定仅使用这些尺寸的提示而不是“平滑”。因此,在许多情况下,生成的文本显示等同于`VALUE_TEXT_ANTIALIAS_OFF`。

    * * *

4.  使用`TEXT_ANTIALIAS_LCD_HRGB`提示进行抗锯齿处理。

<applet alt="AntialiasedText applet" archive="examples/lib/AntialiasedTextApplet.jar" code="AntialiasedText" height="180" width="300"><param name="permissions" value="sandbox"></applet>

* * *

**Note:**  If you don't see the applet running, you need to install at least the [Java SE Development Kit (JDK) 7](http://www.oracle.com/technetwork/java/javase/downloads/index.html) release.

* * *

该 applet 的完整代码位于 [`AntialiasedText.java`](examples/AntialiasedText.java) 中。