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

时间:2013-11-26 17:54:46

标签: java c++ qt javax.imageio

我想使用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中,这是我需要转换回Image但使用C ++的文件。 我看到文件image.jpg的大小大于image.out文件的大小,因此Java必须进行一些我不知道的压缩或编码。因此,我不能只将图像作为JPG读取并将其放在QImage或QPixmap对象中。

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

1 个答案:

答案 0 :(得分:0)

  

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

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

它描述了用于编写的基础知识和插件机制。您想要阅读至少第3部分(尤其是关于ImageWriter的3.4),以及4.1以获得插件概念的介绍。

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

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

PPS:标准的ImageIO JPEG编写器插件(com.sun.imageio.plugins.JPEGImageWriter)使用Independent JPEG Group (IJG) JPEG库来编写其JPEG流。我认为你不能比那更“标准”。