Question

I ai une application C ++ qui communique avec un appareil photo et récupère premières images-données. J'ai alors un octet [] en C ++, que je veux envoyer à Java avec JNI.

Cependant, je dois convertir l'octet brut [] à un format de fichier réel (.bmp était mon premier choix). Je peux facilement le faire si je l'écris de C ++ dans un fichier sur le disque dur, en utilisant BITMAPFILEINFO et BITMAPHEADERINFO, mais je ne sais pas comment on pourrait s'y prendre pour envoyer tout le format Java.

Alors je pensais à envoyer uniquement l'octet brut [] données à l'aide JNI, puis le convertir en .bmp, mais je ne peux pas sembler trouver une bonne bibliothèque pour le faire en Java.

Quel serait mon meilleur choix? Convertir l'image en C ++, puis de l'envoyer en utilisant JNI ou envoyer les données brutes à Java, puis le convertir en .bmp? Comment puis-je parvenir plus facile?

Était-ce utile?

La solution

Il est juste deux lignes en Java 1.5:

BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));

Java (sous Windows) sait comment exporter jpg, bmp et png pour autant que je sais.

Autres conseils

Il n'y a pas besoin de faire tout cela. Tourner le tableau d'octets dans un InputStream et nourrir que pour ImageIO.read ();

public Image getImageFromByteArray(byte[] byteArray){
    InputStream is = new ByteArrayInputStream(byteArray);
    return ImageIO.read(is);
} 

Cela crée un objet image à partir de votre tableau d'octets, qui est alors très trivial en effet d'afficher à l'intérieur d'un composant graphique. Si vous souhaitez enregistrer, vous pouvez utiliser la classe ImageIO pour cela aussi.

public void saveImage(Image img, String fileFormat, File f){
    ImageIO.write(img, fileFormat, f);
}

Si vous savez comment écrire comme .bmp dans un fichier, vous pouvez utiliser (presque) le même code pour l'écriture dans un tampon de mémoire à la place. Ce tampon de mémoire, vous pouvez expédier vers Java, et l'ont décoder le format comme Stroboskop ou Markus Koivisto mentionnés. Si vous avez modifié votre question d'inclure la façon dont vous écrivez les données dans un fichier .bmp, je pourrais suggérer comment convertir en une opération en mémoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top