# Java 2D 渲染

> 原文： [https://docs.oracle.com/javase/tutorial/2d/overview/rendering.html](https://docs.oracle.com/javase/tutorial/2d/overview/rendering.html)

Java 2D API 跨不同类型的设备提供统一的呈现模型。在应用程序级别，无论目标呈现设备是屏幕还是打印机，呈现过程都是相同的。当需要显示某个组件时，会使用相应的`Graphics`上下文自动调用其`paint`或`update`方法。

Java 2D API 包括 [`java.awt.Graphics2D`](https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html) 类，它扩展了 [`Graphics`](https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html) 类，以提供对 Java 2D API 的增强图形和渲染功能的访问。这些功能包括：

*   使用笔触和绘制属性（`draw`方法）渲染任何几何图元的轮廓。
*   通过使用绘画属性（`fill`方法）指定的颜色或图案填充其内部来渲染任何几何图元。
*   渲染任何文本字符串（`drawString`方法）。 font 属性用于将字符串转换为字形，然后使用 paint 属性指定的颜色或模式填充字形。
*   渲染指定的图像（`drawImage`方法）。

此外，`Graphics2D`类支持特定形状的`Graphics`渲染方法，例如`drawOval`和`fillRect`。上面表示的所有方法可以分为两组：

1.  绘制形状的方法
2.  影响渲染的方法

第二组方法使用形成`Graphics2D`上下文的状态属性用于以下目的：

*   改变笔画宽度
*   改变笔画连接在一起的方式
*   设置剪切路径以限制渲染的区域
*   在渲染对象时进行平移，旋转，缩放或剪切
*   定义颜色和图案以填充形状
*   指定如何组合多个图形对象

要在应用程序中使用 Java 2D API 功能，请将传递到组件渲染方法的`Graphics`对象转换为`Graphics2D`对象。例如：

```
public void paint (Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    ...
}

```

如下图所示，`Graphics2D`类渲染上下文包含多个属性。

| ![This figure represents a stroke to outline the shape ](img/b31a5c395046f2ef7daff02c1a9fcd55.jpg) | _ 笔属性 _ 应用于形状轮廓。此笔划属性使您可以使用任何点大小和虚线图案绘制线条，并应用端盖和连接装饰到线条。 |
| ![This figure shows how to fill a shape with solid color](img/46743518d93a6f21b6e560b8f7d48dd7.jpg) | _ 填充属性 _ 应用于形状的内部。此 paint 属性使您可以使用纯色，渐变和图案填充形状。 |
| ![This figure shows how to composite an existing image and a graphic primitives ](img/03f800db700325932eb01d0633bc5664.jpg) | 当渲染对象与现有对象重叠时，使用 _ 合成属性 _。 |
| ![This figure represents shearing transform](img/58b0fe38b82c64a42073cf090c67ff6a.jpg) | 在渲染期间应用 _ 变换 _ 属性以将渲染对象从用户空间转换为设备空间坐标。也可以通过此属性应用可选的平移，旋转，缩放或剪切变换。 |
| ![This figure represents how to define the clipping path by using the Shape object](img/0591aea0aac5f00f688b3df1b2295ffb.jpg) | _ 剪辑 _ 类型将渲染限制为用于定义剪切路径的`Shape`对象轮廓内的区域。用于定义剪辑的任何`Shape`对象。 |
| ![This figure demonstrates a sample of glyphs](img/f8ea3e5dd6cc935bf5bb501562eb9c8a.jpg) | _ 字体 _ 属性用于将文本字符串转换为字形。 |
| ![This figure represents antialiasing ](img/d68058a0df93922e871f0a6983e9755e.jpg) | _ 渲染提示 _ 指定速度和质量之间权衡的偏好。例如，如果此功能可用，您可以指定是否应使用抗锯齿。另请参见[控制渲染质量](../advanced/quality.html)。 |

要了解有关转换和合成的更多信息，请参阅 Java2D 课程中的[高级主题。](../advanced/index.html)

设置属性后，将传递相应的属性对象。如下例所示，要将 paint 属性更改为蓝绿渐变填充，请构造`GradientPaint`对象，然后调用`setPaint`方法。

```
gp = new GradientPaint(0f,0f,blue,0f,30f,green);
g2.setPaint(gp);

```