如何将透明度应用于缓冲图像java
我正在尝试绘制一个方法,该方法获取BuffereImage,使其半透明,然后返回结果BuffereImage。从那里我可以以后再画。然而,我的代码无法描绘任何东西。我想我很接近如何将透明度应用于缓冲图像java,java,transparency,bufferedimage,Java,Transparency,Bufferedimage,我正在尝试绘制一个方法,该方法获取BuffereImage,使其半透明,然后返回结果BuffereImage。从那里我可以以后再画。然而,我的代码无法描绘任何东西。我想我很接近 public BufferedImage ApplyTransparency(BufferedImage image) { BufferedImage dest = new BufferedImage(overlay1.getWidth(), overlay1.getHeight(), B
public BufferedImage ApplyTransparency(BufferedImage image)
{
BufferedImage dest = new BufferedImage(overlay1.getWidth(), overlay1.getHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g3 = dest.createGraphics();
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.DST_IN, 0.9F);
g3.setComposite(ac);
g3.drawImage(overlay1, 0, 0, null);
return dest;
}
您可以将图像绘制到新图像上,调整其透明度,如下所示
public Raster transform(Image img, float alpha) {
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
bi.getGraphics().drawImage(img, 0, 0, null);
RasterOp rop = new RescaleOp(new float[] { 1.0f, 1.0f, 1.0f, alpha }, new float[] { 0.0f, 0.0f, 0.0f, 0.0f }, null);
Raster result = rop.filter(bi.getData(), null);
return result;
}
谢谢你,奥利弗。我设法找出了我的代码不起作用的原因。它需要AlphaComposite标志是DST_OVER或SRC_OVER,而不是DST_IN。我不知道使用光栅比使用缓冲图像有什么好处,因为我自己从来没有使用过。但是看到重新缩放很酷。