BufferedImages übereinander.

Status
Nicht offen für weitere Antworten.

Sharpner

Mitglied
Guten Tag!

Ich habe ein Problem und komme auf keine vernünftige Lösung, darum dachte ich ich frag einmal nach...
Zu meinem Problem:
Ich habe zwei BufferedImages aus .png dateien mit hilfe von ImageIO erzeugt.
Beide sind 32x32 pixel gross, und das eine hat transparente pixel.
Ich möchte nun das Bild das teilweise durchsichtig ist über das andere legen und dann exportieren, allerdings konnte ich keinerlei Methode finden die mir die Arbeit abnimmt.
Kann mir vielleicht jemand einen Tipp geben oder mir eine Möglichkeit sagen wie man das machen kann?
Vielen Dank im voraus
Sharpner
 

The_S

Top Contributor
Du benötigst ein 3. BufferedImage. Von diesem holst du dir dann via BufferedImage#createGraphics ein Graphics2D Objekt. Auf diesem zeichnest du dann mit Graphics2D#drawImage deine beiden Bilder. Anschließend disposed() du dein Graphics2D Objekt und speicherst dein neu erzeugtes BufferedImage mittels ImageIO#write an einen ort deiner Wahl.
 

Sharpner

Mitglied
Wenn ich die beiden Graphics2D objekte gezeichnet habe, wie krieg ich das dann zurück in ein bufferedImage? mein code sieht etwa so aus:
public BufferedImage overlay(BufferedImage bottom, BufferedImage top)
{
BufferedImage temp = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
Graphics2D temp2 = temp.createGraphics();
temp2.drawImage(bottom, null, 32, 32);
temp2.drawImage(top, null, 32, 32);
temp2.dispose();

return temp;
}

weiter weiss ich net ;D
 

The_S

Top Contributor
Für Transparenz muss dein BufferedImage vom Typ TYPE_INT_ARGB sein. Deine Zeichnung ist doch schon in temp gespeichert. Dieses BufferedImage enthält bereits deine beiden anderen Images!
 

Sharpner

Mitglied
Typ ARGB, danke
mein BufferedImage temp ist doch ein leer erzeugtes? wenn ich dies jetzt auf mit

ImageIO.write(temp, "png", new File("d:\\test.png"));
schreibe, erhalte ich nur ein leeres Bild..
soweit ich das sehe hab ich doch die beiden BufferedImages die ich der Methode übergebe nie wirklich in temp geschrieben, oder nicht?
bye
Sharpner
 

The_S

Top Contributor
doch hast du. Ich hab auch ne weile gebraucht, bis ich das damals gecheckt hab, aber hiermit

Code:
Graphics2D g2d = buffimage.createGraphics();

speicherst du den Inhalt des BufferedImages als Referenz in g2d (wenn man das mal so ausdrücken kann). Ab hier wirkt sich alles, was du in g2d änderst auch auf dein BufferedImage aus.

Ein Image malt man übrigens so:

Code:
g2d.drawImage(deinImg, xKoordinate, yKoordinate, this);

Und da dein Bild 32x32 groß ist und du deine beiden Bilder erst bei Pixel 32/32 anfängst zu zeichnen, werden die bilder außerhalb deines Bildes gezeichnet.
 

Sharpner

Mitglied
Ah vielen dank, jetzt hab ichs verstanden ;)
jetzt funktionierts auch, problem gelöst ^^
sorry für die Mühe ;)
bye
Sharpner
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben