You are here

JavaFX 2.0 Image aus BufferedImage (RenderedImage) direkt erstellen

JavaFX 2.0 ist zwar gut ausgerüstet in sachen Images. Per default werden so einige Bilddateitypen unterstützt.
Was aber, wenn weitere Bilddateiformate angezeigt werden sollen?
Oder - selbst/dynamisch erzeugte BufferedImages(RenderedImages, u.a.) sollen nicht erst umständlich als Bilddatei zwischengespeichert und danach wieder geladen und vielleicht auch obendrein hinterher wieder gelöscht werden...?

Klappt mit einem kleinen Umweg über einen ByteArrayOutputStream, der von einem JavaFX 2.0 Image als Source geladen werden kann. Anstatt einer Datei.

Mit Java Advanced Imaging (JAI):

try {
      RenderedImage src = JAI.create("fileload", filename);
      ByteArrayOutputStream tmp_out = new ByteArrayOutputStream();
      JAI.create("encode", src, tmp_out, "PNG", null);
      InputStream tmp_in = new ByteArrayInputStream(tmp_out.toByteArray());
      Image image = new Image(tmp_in);
      } catch (Exception ex) {
      ...
      }

Mit ImageIO:

try {
      BufferedImage bufferedimage = ...
      ByteArrayOutputStream tmp_out = new ByteArrayOutputStream();
      ImageIO.write(bufferedimage, "PNG", tmp_out);
      InputStream tmp_in = new ByteArrayInputStream(tmp_out.toByteArray());
      Image image = new Image(tmp_in);
      } catch (Exception ex) {
      ...
      }


Natürlich muß es nicht das Dateiformat "PNG" sein. Dient hier nur als Beispiel.
Auch habe ich hier nicht auf Schließen von Streams, Freigeben von Instanzen und dergleichen geachtet.