Compositing Graphics

AlphaComposite类封装了各种合成样式,这些样式决定了如何呈现重叠的对象。 AlphaComposite也可以具有用于指定透明度的 alpha 值:alpha = 1.0 完全不透明,alpha = 0.0 完全透明(透明)。 AlphaComposite支持下表中所示的大多数标准 Porter-Duff 合成规则。

Compositing RuleDescription
源码(SRC_OVER)

Source-over compositing
如果要渲染的对象(源)中的像素与先前渲染的像素(目标)具有相同的位置,则源像素将在目标像素上渲染。
来源(SRC_IN)
Source-in compositing
如果源像素和目标像素重叠,则仅渲染重叠区域中的源像素。
源输出(SRC_OUT)
Source-out compositing
如果源像素和目标像素重叠,则仅渲染重叠区域之外的源像素。重叠区域中的像素被清除。
目标(DST_OVER)
Destination-over compositing
如果源像素和目标像素重叠,则仅渲染重叠区域之外的源像素。重叠区域中的像素不变。
目标位置(DST_IN)
Destination-in compositing
如果源像素和目标像素中的像素重叠,则来自源像素的 alpha 会应用于重叠区域中的目标像素。如果 alpha = 1.0,则重叠区域中的像素不变。如果 alpha 为 0.0,则清除重叠区域中的像素。
目标输出(DST_OUT)
Destination-out compositing
如果源像素和目标像素中的像素重叠,则来自源像素的 alpha 会应用于重叠区域中的目标像素。如果 alpha = 1.0,则清除重叠区域中的像素;如果 alpha 为 0.0,则重叠区域中的像素不变。
清除(CLEAR)
清晰,重叠合成
如果源像素和目标像素重叠,则会清除重叠区域中的像素。

若要更改Graphics2D类使用的合成样式,请创建AlphaComposite对象并将其传递到setComposite方法中。

Example: Composite

该程序说明了各种合成样式和 alpha 组合的效果。

Note:

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

Composite.java。包含此 Servlets 的完整代码。

通过调用AlphaComposite.getInstance并指定所需的合成规则来构造新的AlphaComposite对象* ac *。

AlphaComposite ac =
  AlphaComposite.getInstance(AlphaComposite.SRC);

选择不同的合成规则或 alpha 值时,将再次调用AlphaComposite.getInstance,并将新的AlphaComposite分配给* ac *。除了每个像素的 alpha 值外,还会应用所选的 alpha,并将其作为第二个参数传递给AlphaCompositegetInstance

ac = AlphaComposite.getInstance(getRule(rule), alpha);

通过将AlphaComposite对象传递到Graphics 2D setComposite来修改 Composite 属性。对象被渲染为BufferedImage,随后被复制到屏幕,因此在Graphics2D上下文中为BufferedImage设置了复合属性:

BufferedImage buffImg = new BufferedImage(w, h,
                        BufferedImage.TYPE_INT_ARGB);
Graphics2D gbi = buffImg.createGraphics();
...
gbi.setComposite(ac);