2D-Grafik 2 BufferedImages zusammenfügen wird Schwarz/Weiß

GianaSisters

Bekanntes Mitglied
Hallo Zusammen,

ich habe 2 BMP-Bilder die ich gerne untereinander haben möchte.
Dafür benutze ich folgenden Code:

Java:
		BufferedImage image2Panels = new BufferedImage(image1.getWidth()+image2.getWidth(), image1.getHeight() + image2.getHeight(), image1.getType());
			Graphics g = image2Panels.getGraphics();
				
			BufferedImage out = new BufferedImage(image1.getWidth(), (image1.getHeight() + image2.getHeight()), image1.getType());
			out.createGraphics().drawImage(image1, 0, 0, null);
			out.createGraphics().drawImage(image2, 0, image1.getHeight(), null);
ImageIO.write(out, "bmp", new File("D:/test.bmp"));

image1 und image2 werden ganz einfach geladen, über:
Java:
	BufferedImage ret = null;
	ret = ImageIO.read(new File(fileName));

Problem: Das zusammengefügte Bild ist nur schwarz weiß. Vermutlich muss in der Zeile:
Java:
out.createGraphics().drawImage(image1, 0, 0, null);
etwas verändert werden. Was genau hab ich nicht rausgefunden. Vielleicht: BufferedImage.TYPE_INT_RGB ? Aber dazu wird dann noch ein ImageObserver benötigt, was immer das sein mag. Kann mir jemand helfen ?
Viele Grüße,
Giana
 
image1 ist ein BMP, welches per :

data = ........deflate("test", image1);

geladen wird.
Ich weiß nicht wie ich den Typ rausfindensollte, falls der eine Rolle spielt.
... brauchst du den ImageConverter noch ?

Java:
public static byte[] deflate(String name, BufferedImage image) {
        byte[] ret = null;
        try {
            ret = ImageConverter.toByteArray(image, "bmp");
            ret = Zip.encodeZIP(name, ret);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ret;
    }
 
Wieso lädst du dein Bild denn nicht einfach so ?
Java:
class BildPanel extends JPanel
	{
		 
		private static final long serialVersionUID = 1L;
		private BufferedImage img;
	    
	    public BildPanel(String dateiName)
	    {
	        
	        try 
	        {
	            img = ImageIO.read(getClass().getResourceAsStream(dateiName));
	        } 
	        
	        catch (IOException e) 
	        {
	            JOptionPane.showMessageDialog(null, dateiName + " wurde nicht gefunden!");
	        }
	        
	        
	        this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
	      
	        
	    }
	    
	    public void paintComponent(Graphics g){
	        super.paintComponent(g);
	        g.drawImage(img,0,0,null);
	    }
	    
	}
Diese Klasse kannst du ja dann etwas abändern wenn du 2 Bilder hast und die beiden untereinander sein sollen.
 
Das ist ja das reine Malen eines Bildes. Ich benötige den Zusammenschluss von mehreren Einzelbildern in 'ein' BufferedImage - Objekt damit es als Attribut in ein größeres Objekt geschrieben wird.
 
Schreib mal System.out.println(image1.getType()); über der Zeile wo du dein image2Panels erstellst und sag uns was er ausgibt.
 
BufferedImage out = new BufferedImage(image1.getWidth(), (image1.getHeight() + image2.getHeight()), BufferedImage.TYPE_INT_ARGB;
Graphics g = out.createGraphics();
g.drawImage(image1, 0, 0, null);
g.drawImage(image2, 0, image1.getHeight(), null);
g.dispose(); // !!!

Sollte es tun...
 
@Marco: Keine Java Tags? Da stimmt irgendwas mit dir heute wohl nicht, gibs' zu, du musst sterben, du musst uns nicht schonen, wir können mit der Wahrheit umgehen?!

Und nun zum Thema: Was Marco da beschreibt ist genau das, was ich und bErt0r versuchen als Fehlerquelle auszuschließen.
Vermutlich ist der Typ deines Bildes einfach nicht ARGB.
 

Zurück
Oben