我有一个C ++应用程序,它与相机通信并获取原始图像数据。 然后我在C ++中有一个Byte [],我想用JNI发送给Java。
但是,我需要将原始Byte []转换为真实的文件格式(.bmp是我的第一选择)。 如果我使用BITMAPFILEINFO和BITMAPHEADERINFO将它从C ++写入硬盘驱动器上的文件,我可以很容易地做到这一点,但我不知道如何将整个格式发送到Java。
然后我考虑使用JNI仅发送原始byte []数据,然后将其转换为 .bmp,但我似乎无法在Java中找到任何好的库。
什么是我最好的选择?用C ++转换图像然后使用JNI发送它或将RAW数据发送到Java然后将其转换为.bmp?我最容易实现这个目标吗?
答案 0 :(得分:7)
Java 1.5中只有两行:
BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));
Java(在Windows上)知道如何导出jpg,png和bmp据我所知。
答案 1 :(得分:4)
没有必要这样做。将字节数组转换为InputStream并将其提供给ImageIO.read();
public Image getImageFromByteArray(byte[] byteArray){
InputStream is = new ByteArrayInputStream(byteArray);
return ImageIO.read(is);
}
这会从你的字节数组中创建一个Image对象,然后在gui组件中显示它是非常微不足道的。如果您想保存它,您也可以使用ImageIO类。
public void saveImage(Image img, String fileFormat, File f){
ImageIO.write(img, fileFormat, f);
}
答案 2 :(得分:1)
如果您知道如何将.bmp
写入文件,那么您可以使用(几乎)相同的代码来写入内存缓冲区。你可以将这个内存缓冲区运送到Java,并让它解码像Stroboskop或Markus Koivisto这样的格式。如果您编辑了问题以包括将数据写入.bmp
文件的方式,我可以建议如何将其转换为内存中操作。