Get buffered image aus byte-array von raw-Daten
Bin ich über JNA. und ich bin immer byte-array von raw-Daten aus meiner c++ - Methode.
Jetzt bin ich stecken, wie man buffered image in java mithilfe von dieser roh-Daten byte-array.
Ich hatte versucht einige Dinge, um es als tiff-Bild, aber ich dint, um Erfolg zu haben.
diese sind der code, den ich bisher ausprobiert.
hier mein byte-array enthält Daten für 16-bit-Graustufen-Bild. bekomme ich diese Daten von x-sensor-Gerät. und nun muss ich das Bild aus diesem byte-array.
ERSTEN VERSUCHEN
byte[] byteArray = myVar1.getByteArray(0, 3318000);//array of raw data
ImageInputStream stream1=ImageIO.createImageInputStream(newByteArrayInputStream(byteArray));
ByteArraySeekableStream stream=new ByteArraySeekableStream(byteArray,0,3318000);
BufferedImage bi = ImageIO.read(stream);
ZWEITEN VERSUCH
SeekableStream stream = new ByteArraySeekableStream(byteArray);
String[] names = ImageCodec.getDecoderNames(stream);
ImageDecoder dec = ImageCodec.createImageDecoder(names[0], stream, null);
//at this line get the error ArrayIndexOutOfBoundsException: 0
RenderedImage im = dec.decodeAsRenderedImage();
Ich denke, dass ich hier vermisst.
Als meine array mit raw-Daten ,ist es nicht containthen header für tiff-Bild.
m ich Recht?
wenn ja, dann wie dieser header in byte-array. und schließlich, wie man Bild von dieser byte-array?
testen, dass ich immer die richtige byte-array aus meinem verwandten Methode, die ich gespeichert das byte-array als .raw-Datei und nach dem öffnen dieses raw-Datei in ImageJ software Sie Sauen mich richtig Bild, so meine raw-Daten ist korrekt.
Das einzige, was ich brauche, ist, dass, wie zu konvertieren meiner raw-byte-array in image byte array?
InformationsquelleAutor Jony | 2012-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was ich benutze zur Konvertierung von raw-pixel-Daten einer
BufferedImage
. Meine Pixel sind signiert, 16-bit:Ich bin dann mit JAI zu codieren des resultierenden Bildes. Sagen Sie mir, wenn Sie den code als gut.
EDIT: ich habe erheblich verbessert die Geschwindigkeit Dank @Brent Nash Antwort auf eine ähnliche Frage stellen.
EDIT: der Vollständigkeit halber, hier ist der code für unsigned 8 bit:
Werden, honnest, noch nicht. Ich codiert diese Funktion, weil ich hatte das gleiche mit
byte[]
und schließlich müssen die gleichen mitshort[]
einem Tag. Aber Java ist groß-endianed und wenn man mit Windows arbeitet, der Strom, die Sie erhalten, ist wahrscheinlich wenig endianed, und Sie müssten, um sich der Bekehrung. Überprüfen Sie diejava.nio.ByteOrder.nativeOrder()
zu wissen, welches die native Byte-Reihenfolge (wenn Sie möchten, um Ihren code cross-platformed).könnten Sie bitte die Methode mit dem byte-array input?
ändern Sie einfach die
DataBufferShort
zuDataBufferByte
undBufferedImage.TYPE_USHORT_GRAY
zuBufferedImage.TYPE_BYTE_GRAY
(und alleshort[]
zubyte[]
), und Sie werden gut zu gehen.Das war genau das, was ich suchte. Wurde nur Kurz zu Byte an jeweiligen Orten, wie ich es brauchen für die Arbeit mit byte[]. Vielen Dank @Matthieu
InformationsquelleAutor Matthieu
Ob oder nicht das byte-array enthält buchstäblich nur Pixeldaten oder eine strukturierte Bilddatei wie TIFF usw. hängt wirklich davon ab, wo Sie bekam es von. Es ist unmöglich zu beantworten, dass aus der zur Verfügung gestellten Informationen.
Jedoch, wenn es enthält ein strukturiertes Bild-Datei, dann können Sie in der Regel:
Wenn Sie nur buchstäblich rohen pixel-Daten, dann haben Sie ein paar der wichtigsten Optionen:
Ich denke, die oben ist am einfachsten, wenn Sie wissen, was Sie tun, mit den bits und bytes. Aber, im Prinzip, Sie sollten in der Lage sein, Folgendes zu tun:
InformationsquelleAutor Neil Coffey