Zusammengesetztes Bild verliert Transparenz

Orthak

Mitglied
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):

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);
        }
    }
(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:
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!
 
Problem gelöst:

Code:
    public BufferedImage exportImage() {
 
    	// Bild zeichnen
    	BufferedImage prevImage = new BufferedImage(128, 192, BufferedImage.TYPE_INT_ARGB);
        Graphics imgGraphic = prevImage.getGraphics();
    	BufferedImage img = null;
        for ( Iterator<BufferedImage> i = this.imageList.iterator(); i.hasNext(); ) {
        	img = i.next();
        	imgGraphic.drawImage(img, 0, 0, null);
        }

        // Ergebnis zurückgeben
    	return prevImage;
    }
 
Zurück