将多个BufferedImages叠加在一起?

时间:2012-06-21 23:51:16

标签: java bufferedimage

我有多个透明的BufferedImage个实例,我想将它们叠加在一起(也就是Photoshop图层)并烘焙成一个BufferedImage输出。我该怎么做?

3 个答案:

答案 0 :(得分:10)

我想说最好的选择是获取缓冲的图像,并创建一个额外的图像,以便有一个对象可以追加。然后只需使用Graphics.drawImage()将它们放在彼此的顶部。

这些内容如下:

BufferedImage a = ImageIO.read(new File(filePath, "a.png"));
BufferedImage b = ImageIO.read(new File(filePath, "b.png"));
BufferedImage c = new BufferedImage(a.getWidth(), a.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics g = c.getGraphics();
g.drawImage(a, 0, 0, null);
g.drawImage(b, 0, 0, null);

答案 1 :(得分:2)

让我们假设第一个BufferedImage命名为bi1,第二个bi2命名为bi2,而想要将它们分层的图像命名为目标。

BufferedImage target=new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D targetGraphics=target.createImage();
targetGraphics.drawImage(bi1,0,0,null);//draws the first image onto it

int[] pixels2=((DataBufferInt) bi2.getRaster().getDataBuffer()).getData();
int[] pixelsTgt=((DataBufferInt) target.getRaster().getDataBuffer()).getData();
for(int a=0;a<pixels2.length;a++)
{
     pixelsTgt[a]+=pixels2[a];//this adds the pixels together
}

确保所有三个BufferedImage对象都是TYPE_INT_ARGB,以便打开alpha。如果两者加在一起超过最大整数,这可能无法给出您想要的确切结果,因此您可能需要添加一些内容来帮助解决这个问题。像素使用位移来添加颜色,整数排序为AARRGGBB。

答案 2 :(得分:2)

还要考虑图形上下文可用的AlphaComposite模式,讨论here

image http://i52.tinypic.com/ndo51u.png