我想使用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类如何编码图像吗?
答案 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流。我认为你不能比那更“标准”。