2012-06-21 59 views

回答

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); 
+0

我没有找到'Graphics#draw'方法。我用'Graphics#drawImage'。 – creemama

+0

哇!我不能相信你是第一个在这段时间后指出这一点的人。我会更新答案,以免引起其他人误入歧途。 –

1

让我们假设第一BufferedImage的被命名为BI1和第二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。