2017-02-19 5 views
3

Ich programmiere eine Bildbearbeitungsanwendung mit javafx für die GUI und möchte das verarbeitete Bild auf dem Bildschirm zeigen. Mein Programm behandelt das Bild als ein dreidimensionales Doppelarray wie double [3] [1080] [1920], also muss ich den Farbraum des Bildes verkleinern und die Doppel in Byte oder (wenn möglich) Kurzformen umwandeln, da die ImageView von javafx unterstützt keine Fließkommawerte oder 64 Bit für jede RGB-Komponente. Ich habe herausgefunden, dass Imageview nur Daten aus einer Datei oder einem Eingabestream laden kann, also muss ich ein BufferedImage erstellen, es mit den Convert-Daten aus dem Array füllen und den BufferedImage-Encode als JPEG, BMP, PNG oder GIF in einen Stream schreiben Lesen Sie diesen Stream mit dem Konstrukt javafx.scene.image.Image und übergeben Sie dieses Bild an ImageView. Eine grausame Art, ein Array in ein Bild zu konvertieren, wollte ich neueren in jedem Dateiformat codiert sein, aber ich fand keine Alternative zu diesem (außer javafx nicht verwenden).

Nun meine erste Frage:
Die setRGB-Methode von BufferedImage nimmt alle Farbkomponenten als int zusammen. Wie kann ich sie richtig kombinieren?
Und meine zweite Frage:
Ist der Andy Weg, mehr als 8 Bit für jede Komponente zu speichern?

Danke für jede Hilfe!Erstellen von javafx Bild von Datenarray

+0

Es ist nicht notwendig, über ein Dateiformat zu gehen. Sie können ein 'ImageView' erstellen und das' Image' direkt mit 'setImage (...)' setzen. Verwenden Sie [WritableImage] (http://docs.oracle.com/javase/image/WaritableImage.html) und [PixelWriter] (http://docs.oracle.com/javase/image/WitableImage.html). oracle.com/javase/8/javafx/api/javafx/scene/image/PixelWriter.html) um die Daten in das Bild zu bringen. –

+0

Mit dem 'WritableImage' kann ich nicht nur Konvertierungen vermeiden, ich kann 'setPixels' mit' PixelFormat.getByteRgbInstance' verwenden, um Daten als 'byte' Array zu verarbeiten. Das hat sehr geholfen. Danke! – Niclas

Antwort