这些Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并且可能使用已不再可用的技术。
请参阅Java语言更改了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发行说明了解有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
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组合的效果。
包含了此小程序的完整代码。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
对象传递给Graphics2D
的setComposite
方法来修改合成属性。对象被渲染到BufferedImage
中,然后将其复制到屏幕上,因此在BufferedImage
的Graphics2D
上下文中设置合成属性:
BufferedImage buffImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); Graphics2D gbi = buffImg.createGraphics(); ... gbi.setComposite(ac);