我有一个C ++应用程序,该应用程序与相机通信并获取原始图像数据。然后,我在C ++中有一个字节[],我想和JNI一起发送到Java。

但是,我需要将原始字节[]转换为真实的文件格式(.bmp是我的首选)。如果我使用bitmapfileinfo和bitmapheaderinfo将其从C ++写到文件上,我可以轻松地执行此操作,但是我不知道如何将整个Format发送到Java。

然后,我考虑使用JNI仅发送原始字节[]数据,然后将其转换为.bmp,但我似乎找不到在Java中使用任何库的库。

我最好的选择是什么?将图像转换为C ++,然后使用JNI发送或将原始数据发送到Java,然后将其转换为.bmp?我最容易实现这一目标?

有帮助吗?

解决方案

Java 1.5中只有两行:

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

据我所知,Java(在Windows上)知道如何导出JPG,PNG和BMP。

其他提示

无需这样做。将字节数组变成输入流,然后将其馈送到Imageio.Read();

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

这会从您的字节数组中创建一个图像对象,然后它确实非常琐碎,可以在GUI组件内显示。如果您想保存它,也可以使用Imageio类。

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

如果您知道如何写 .bmp 到一个文件,您可以使用(几乎)相同的代码来写入内存缓冲区。您可以将内存缓冲区运送到Java,并使其解码如Stroboskop或Markus Koivisto所提到的格式。如果您编辑了问题以包括将数据写入一个的方式 .bmp 文件,我可以建议如何将其转换为内存操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top