文档

Java™ 教程
隐藏目录
组合图形
导航: 2D图形
课程: Java2D高级主题

合成图形

AlphaComposite类封装了各种合成样式,用于确定如何渲染重叠的对象。一个AlphaComposite还可以具有指定透明度的alpha值:alpha = 1.0 表示完全不透明,alpha = 0.0 表示完全透明(清除)。AlphaComposite支持下表中显示的大多数标准Porter-Duff合成规则。

合成规则 描述
源覆盖(SRC_OVER
源覆盖合成
如果要渲染的对象(源)的像素与之前已渲染的像素(目标)位于同一位置,则源像素将覆盖目标像素。
源中(SRC_IN
源中合成
如果源和目标的像素重叠,只有重叠区域中的源像素将被渲染。
源外(SRC_OUT
源外合成
如果源和目标的像素重叠,只有重叠区域之外的源像素将被渲染。重叠区域中的像素将被清除。
目标覆盖(DST_OVER
目标覆盖合成
如果源和目标的像素重叠,只有重叠区域之外的源像素将被渲染。重叠区域中的像素不会改变。
目标中(DST_IN
目标中合成
如果源和目标的像素重叠,源的alpha值将应用于重叠区域的目标像素。如果alpha = 1.0,则重叠区域中的像素保持不变;如果alpha = 0.0,则重叠区域中的像素被清除。
目标外(DST_OUT
目标外合成
如果源和目标的像素重叠,源的alpha值将应用于重叠区域的目标像素。如果alpha = 1.0,则重叠区域中的像素被清除;如果alpha = 0.0,则重叠区域中的像素保持不变。
清除(CLEAR
有重叠区域的清除合成
如果源和目标的像素重叠,重叠区域的像素将被清除。

要更改Graphics2D类使用的合成样式,需要创建一个AlphaComposite对象,并将其传递给setComposite方法。

示例:合成

此程序演示了各种合成样式和alpha组合的效果。


注意:如果您没有看到小程序正在运行,则需要安装至少Java SE Development Kit (JDK) 7版本。下载地址

Composite.java包含了此小程序的完整代码。

通过调用AlphaComposite.getInstance方法并指定所需的合成规则来构建一个新的AlphaComposite对象ac

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

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

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

通过将AlphaComposite对象传递给Graphics2DsetComposite方法来修改合成属性。对象被渲染到BufferedImage中,然后将其复制到屏幕上,因此在BufferedImageGraphics2D上下文中设置合成属性:

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

上一页: 裁剪绘图区域
下一页: 控制渲染质量