Obtenir tampon image de tableau d'octets de données brutes
Je suis en utilisant la JNA. et j'obtiens le tableau d'octets de données brutes à partir de mon c++ méthode.
Maintenant, je suis coincé comment obtenir le tampon d'image en java à l'aide de ces données brutes tableau d'octets.
J'avais essayé quelques choses pour l'obtenir en format tiff mais je dint obtenir le succès.
ce sont le code que j'ai essayé jusqu'à présent.
voici mon tableau d'octets de données contient des données de 16 bits, échelle de gris de l'image. je reçois ces données à partir de x-capteur de l'appareil. et maintenant, j'ai besoin d'obtenir une image à partir de ce tableau d'octets.
D'ABORD ESSAYER
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);
DEUXIÈME ESSAI
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();
Je pense que je suis absent ici.
Comme mon tableau contenant des données brutes ,il n'a pas containthen en-tête d'image tiff.
m-je le droit?
si oui, alors comment fournir cet en-tête dans le tableau d'octets. et finalement, comment obtenir de l'image à partir de ce tableau d'octets?
de test que je suis bon tableau d'octets de ma langue maternelle méthode que j'ai stocké ce tableau d'octets .fichier raw et après l'ouverture de ce fichier brut dans le logiciel ImageJ il sème-moi de corriger l'image donc mes premières données sont correctes.
La seule chose que j'ai besoin est que la façon de convertir mes brutes tableau d'octets de l'image du tableau d'octets?
OriginalL'auteur Jony | 2012-05-23
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'utilise pour convertir les données de pixels d'une
BufferedImage
. Ma pixels sont signés de 16 bits:Je suis alors à l'aide de JAI pour coder l'image résultante. Dites-moi si vous avez besoin du code.
EDIT: j'ai grandement amélioré la vitesse grâce à @Brent Nash réponse sur une question similaire.
EDIT: Par souci d'exhaustivité, voici le code non signé sur 8 bits:
Résultat des courses, pas encore. J'ai codé cette fonction parce que j'ai eu la même chose avec
byte[]
et devra finalement la même chose avecshort[]
un jour. Cependant, Java est grand-endianed et si vous travaillez avec Windows, le flux que vous recevez est probablement peu endianed et vous devez faire vous-même la conversion. De vérifier lajava.nio.ByteOrder.nativeOrder()
pour savoir lequel est le natif d'Ordre des Octets (si vous souhaitez conserver votre code de la croix-platformed).pourriez-vous fournir la méthode avec un tableau d'octets d'entrée?
il suffit de changer le
DataBufferShort
àDataBufferByte
etBufferedImage.TYPE_USHORT_GRAY
àBufferedImage.TYPE_BYTE_GRAY
(et tous lesshort[]
àbyte[]
) et vous serez bon d'aller.C'est exactement ce que je cherchais. Juste de changer à Court d'Octet à places respectives que j'en ai besoin pour travailler avec byte[]. Merci beaucoup @Matthieu
OriginalL'auteur Matthieu
De savoir si ou non le tableau d'octets contient littéralement juste des données de pixels ou structuré un fichier image tels que TIFF etc dépend de l'endroit où vous l'avez obtenu. Il est impossible d'y répondre qu'à partir de l'information fournie.
Toutefois, si elle contient une image structurée de fichier, alors vous pouvez généralement:
Si vous avez juste littéralement pixels bruts de données, alors vous avez un couple de principales options:
Je pense que le ci-dessus est plus facile si vous savez ce que vous faites avec les bits et les octets. Cependant, en principe, vous devriez être en mesure de faire ce qui suit:
OriginalL'auteur Neil Coffey