用Qt解码用Java ImageIO类编码的图像

Decoding with Qt an Image Encoded with Java ImageIO class

本文关键字:编码 图像 ImageIO Qt 解码 Java      更新时间:2023-10-16

我想使用C++显示图像,更确切地说,使用Qt Framework。图像已通过以下方式使用ImageIO.write方法进行编码:

          BufferedImage originalImage = ImageIO.read(new File("c:\image.jpg"));
          // convert BufferedImage to byte array
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ImageIO.write(originalImage, "jpg", baos);
          baos.flush();
          imageInByte = baos.toByteArray();
          baos.close();

然后ByteArrayOutputStream的内容被简单地转储在文件image.out中,这是我需要使用C++转换回image的文件。我看到image.jpg文件的大小大于image.out文件的大小,所以Java必须进行一些我不知道的压缩或编码。所以我不能只把图像读成JPG,然后把它放在QImage或QPixmap对象中。

有人知道ImageIO类是如何编码图像的吗?

有人知道ImageIO类是如何编码图像的吗?

最好的选择可能是阅读Oracle的Java Image I/O API指南。

它描述了用于编写的基础知识和插件机制。您至少想阅读第3节(尤其是关于ImageWriter的3.4节),也许还想阅读4.1节,了解插件概念的介绍。

有关如何控制JPEG格式特定写入设置的详细信息,请参阅JPEGImageWriteParam API文档。

PS:不过,你的代码看起来还可以,并且应该提供有效的JPEG,前提是ImageIO阅读器插件可以读取你的初始文件(com.sun.imageio.plugins.JPEGImageReader对非标准文件的限制非常严格,即使大多数其他软件都很乐意读取它们)。

PPS:标准的ImageIOJPEG编写器插件(com.sun.imageio.plugins.JPEGImageWriter)使用独立JPEG组(IJG)JPEG库来编写其JPEG流。我不认为你能得到比这更"标准"的东西。