Cómo crear un archivo BMP desde un byte en bruto en Java

Tengo una aplicación C ++ que se comunica con una cámara y recupera datos de imagen en bruto. Luego tengo un Byte [] en C ++, que quiero enviar a Java con JNI.

Sin embargo, necesito convertir el Byte sin formato [] a un formato de archivo real (.bmp fue mi primera opción). Puedo hacer esto fácilmente si lo escribo desde C ++ a un archivo en el disco duro, usando BITMAPFILEINFO y BITMAPHEADERINFO, pero no sé cómo se haría para enviar el formato completo a Java.

Luego pensé en enviar solo los datos de bytes sin procesar [] utilizando JNI y luego convertirlos a .bmp, pero parece que no puedo encontrar ninguna buena biblioteca para hacer esto en Java.

¿Cuál sería mi mejor opción? ¿Convertir la imagen en C ++ y luego enviarla utilizando JNI o ​​enviar los datos RAW a Java y luego convertirlos a .bmp? ¿Cómo sería más fácil lograr esto?

Son solo dos líneas en Java 1.5:

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

Java (en Windows) sabe cómo exportar jpg, png y bmp hasta donde sé.

No hay necesidad de hacer nada de eso. Convierta la matriz de bytes en InputStream y aliméntela a ImageIO.read ();

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

Esto crea un objeto de imagen desde su matriz de bytes, que es muy trivial para mostrar dentro de un componente gui. Si desea guardarlo, puede usar la clase ImageIO para eso también.

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

Si sabe cómo escribir como .bmp en un archivo, puede usar (casi) el mismo código para escribir en un búfer de memoria. Ese búfer de memoria puede enviarse a Java y hacer que decodifique el formato como lo mencionó Stroboskop o Markus Koivisto. Si editó su pregunta para incluir la forma en que escribe los datos en un archivo .bmp , podría sugerirle cómo convertir eso en una operación en memoria.