jME3: awt.Image <-> jME3.Image

thewulf00

Bekanntes Mitglied
Hallo,

ich versuche gerade, ein BufferedImage als Textur zu verwenden und finde einfach keinen Weg. Wenn man danach googled und etwas tiefer eintaucht, dann findet man immer nur Referenzen zu einer älteren jME-Version.

Also: Wie kann ich ein Bild, das mir in Form eines BufferedImage vorliegt, in ein jME3.Texture überführen? (Oder in jME3.Image)

Weitere Frage: Wie geht es umgekehrt? Ich habe eine Textur vorliegen und möchte sie in ein BufferedImage überführen. Ich habe bisher nur den Umweg über [c]Screenshots.convertScreenShot(tex.getImage().getData(0), bufferedImage)[/c] gefunden. Und warum gibt mir eigentlich tex.getImage().getData() ne Liste von ByteBuffern?
 
Also von einer Textur zu einem BufferedImage habe ich inzwischen gefunden:

[Java]import jme3tools.converters.ImageToAwt;
[...]
BufferedImage img = ImageToAwt.convert(tex.getImage(), false, false, 0);[/Java]

Leider habe ich keine Idee und finde auch im jME3-Code keine Rückwärts-Variante.
 
Zum Bytebuffer: Das sind Rohdaten. Sprich die reinen RGB(A) Werte, 3 bzw. 4 Byte.

Um aus dem ByteBuffer ein BufferedImage zu machen musst du die Daten entsprechend an dein BufferedImage überführen. Die Höhe und Weite von der Textur kannst du abfragen.

Kann sein das es da auch was fertiges gibt, habe jetzt auf die schnelle in der Doku aber nichts gefunden.
jMonkeyEngine3
 
So, endlich hab ichs gefunden.

Java:
import com.jme3.texture.plugins.AWTLoader;
[...]
public Texture AwtImageToTexture(BufferedImage img) {
  AWTLoader loader = new AWTLoader();
  Texture   tex    = new Texture2D();

  tex.setImage(loader.load(img, true));
  return tex;
}


@Evil-Devil: Ja, das dachte ich mir, aber warum hat eine Texture denn MEHRERE ByteBuffer? Die Funktion getData() liefert eine List<ByteBuffer> oder erwartet einen Index als Parameter.
 
Naja, also wenn ich .size() mache, dann kommt ne 1, also ist 0 der korrekte Index. Wenn ich 0 mache, dann kommt auch ein ByteBuffer, aber mich interessiert trotzdem, wofür diese Funktion vorgesehen ist. Ich nehme mal, für Multi-image-Animationen.
 

Zurück
Oben