Hallo,
ich arbeite an einer Anwendung (Java 1.6, Swing) in welcher man mehrere Bilder überlagern und das Ergebnis abspeichern können soll. Das Überlagern und Anzeigen innerhalb eines Preview-Panels funktioniert schon ganz gut. Hier die Methode (Klasse abgeleitet von JPanel):
(imageList ist eine ArrayList mit den Bildern. )
Will ich die ganze Sache allerdings speichern, ist im Ergebnis nur die letzte Ebene sichtbar. Folgend der Speichercode:
Das Problem muss bereits vor dem Speichern auftreten. Leite ich die Ausgabe in das Anzeigepanel zurück, wird schon nur noch der letzte Layer angezeigt. Jemand eine Idee woran das liegen könnte?
Danke!
ich arbeite an einer Anwendung (Java 1.6, Swing) in welcher man mehrere Bilder überlagern und das Ergebnis abspeichern können soll. Das Überlagern und Anzeigen innerhalb eines Preview-Panels funktioniert schon ganz gut. Hier die Methode (Klasse abgeleitet von JPanel):
Code:
@Override
public void paintComponent(Graphics g) {
BufferedImage img = null;
for ( Iterator<BufferedImage> i = this.imageList.iterator(); i.hasNext(); ) {
img = i.next();
g.drawImage(img, 0, 0, null);
}
}
Will ich die ganze Sache allerdings speichern, ist im Ergebnis nur die letzte Ebene sichtbar. Folgend der Speichercode:
Code:
public BufferedImage exportImage() {
BufferedImage img = new BufferedImage(128, 192, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
g.setComposite(AlphaComposite.Src);
for ( Iterator<BufferedImage> i = this.imageList.iterator(); i.hasNext(); ) {
img = i.next();
System.err.println("ImageType: "+img.getType());
g.drawImage(img, 0, 0, null);
}
g.dispose();
return img;
}
...
public void exportImage(File target) {
BufferedImage expImg = this.appWindow.getImagePanel().exportImage();
appWindow.setImagePanel(new ImagePanel(expImg));
try {
ImageIO.write(expImg, "PNG", target);
} catch (IOException e) {
e.printStackTrace();
}
}
Das Problem muss bereits vor dem Speichern auftreten. Leite ich die Ausgabe in das Anzeigepanel zurück, wird schon nur noch der letzte Layer angezeigt. Jemand eine Idee woran das liegen könnte?
Danke!