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.



Belgium Football Jersey 2016, belgium International Soccer Team, s-2xl Belgium Home Shorts 18 Models Belgium Home Short Trousers http://jerseyalphago.com/71-Belgium-Football-Jersey-2016-Belgium-International-Soccer-Team-S-2XL-Belgium-home-shorts-18-models-Belgium-home-Short-Trousers.html