我的图像透明度有问题。它是以下内容:
我有image1,我需要在它上面重叠image2。 image2是透明的png。我想创建一个带有水印的图像,这将是image1顶部的透明图像。
当我打开具有透明度的image2并将其放在JFrame中进行预览时,它会以透明度打开。但是当我使用BufferImage对象的方法getRGB来获取image2的像素时,我使用setRGB将它覆盖在image1上,而image2失去透明度并获得白色背景。这是代码:
public class Test {
public static void main(String[] args) throws IOException {
BufferedImage image = ImageIO.read(new File("c:/images.jpg"));
BufferedImage image2 = ImageIO.read(new File("c:/images2.png"));
int w = image2.getWidth();
int h = image2.getHeight();
int[] pixels = image2.getRGB(0, 0, w, h, null, 0, w);
image2.setRGB(0, 0, w, h, pixels ,0 ,w);
// here goes the code to show it on JFrame
}
}
拜托,有人可以告诉我我做错了什么吗?我注意到这段代码正在丢失image2的alpha。我怎么能让它不失去阿尔法?
答案 0 :(得分:3)
问题是setPixel将使用直接接收像素的图像的编码,而不解释原始图像的图形上下文。如果您使用 graphics 对象,则不会发生这种情况。
尝试:
public static void main(String[] args) throws IOException {
BufferedImage image = ImageIO.read(new File("c:/images.jpg"));
BufferedImage image2 = ImageIO.read(new File("c:/images2.png"));
int w = image2.getWidth();
int h = image2.getHeight();
Graphics2D graphics = image.createGraphics();
graphics.drawImage(image2, 0, 0, w, h, null);
graphics.dispose();
// here goes the code to show it on JFrame
}