How to create a BMP file from raw byte[] in Java

我的未来我决定 提交于 2019-12-23 09:04:29

问题


I have a C++ application which communicates with a camera and fetches raw image-data. I then have a Byte[] in C++, which i want to send to Java with JNI.

However, i need to convert the raw Byte[] to an real file format(.bmp was my first choice). I can easily do this if i write it from C++ to an file on the hard-drive, using BITMAPFILEINFO and BITMAPHEADERINFO, but i do not know how one would go about sending the entire-format to Java.

Then i thought about sending only the raw byte[] data using JNI and then converting it to .bmp, but i can't seem to find any good library for doing this in Java.

What would be my best choice? Converting the image in C++ and then sending it using JNI or send the RAW data to Java and then convert it to .bmp? How would i easiest achieve this?


回答1:


It's just two lines in Java 1.5:

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

Java (on Windows) knows how to export jpg, png and bmp as far as i know.




回答2:


There's no need to do any of that. Turn the byte array into an InputStream and feed that to ImageIO.read();

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

This creates an Image object from your byte array, which is then very trivial indeed to display inside a gui component. Should you want to save it, you can use the ImageIO class for that as well.

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



回答3:


If you know how to write as .bmp to a file, then you can use (almost) the same code for writing into a memory buffer instead. That memory buffer you can ship over to Java, and have it decode the format like Stroboskop or Markus Koivisto mentioned. If you edited your question to include the way you write the data to a .bmp file, I could suggest how to convert that into an in-memory operation.



来源:https://stackoverflow.com/questions/1193748/how-to-create-a-bmp-file-from-raw-byte-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!