2012-06-21 9 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 так, что альфа включен. Это может не дать вам точных результатов, которые вы хотели, если два добавленных вместе больше максимального числа, поэтому вы можете добавить что-то, чтобы помочь исправить это. Пиксели используют битовые сдвиги для добавления к цветам с целым числом, упорядоченным как AARRGGBB.

Смежные вопросы