# jME3: awt.Image <-> jME3.Image



## thewulf00 (4. Jul 2011)

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?


----------



## thewulf00 (4. Jul 2011)

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.


----------



## Evil-Devil (4. Jul 2011)

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


----------



## thewulf00 (4. Jul 2011)

So, endlich hab ichs gefunden.


```
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.


----------



## Evil-Devil (4. Jul 2011)

Keine Ahnung. Laut der JME3 Doku sollte das nur einen ByteBuffer liefern. Verwendest du noch die JME2 Version?


----------



## thewulf00 (4. Jul 2011)

Evil-Devil hat gesagt.:


> Keine Ahnung. Laut der JME3 Doku sollte das nur einen ByteBuffer liefern. Verwendest du noch die JME2 Version?


Nein:

Class Image (jMonkeyEngine3)


> public java.util.List<java.nio.ByteBuffer> getData()


----------



## Fu3L (4. Jul 2011)

> getData
> 
> public java.nio.ByteBuffer getData(int index)
> 
> getData returns the data for this image. If the data is undefined, null will be returned.



Was ist, wenn du dashier mit 0 aufrufst? (nur geraten^^)


----------



## thewulf00 (4. Jul 2011)

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.


----------

