2013-11-26 79 views
0

我想使用C++更精確地使用Qt Framework來顯示圖像。 的圖像已ImageIO.write方法以這種方式編碼:使用Qt解碼使用Java ImageIO編碼的圖像

  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.jpg的大小大於image.out文件的大小,所以Java必須進行一些我不知道的壓縮或編碼。所以我不能只將圖像作爲JPG讀取,並將其放入QImage或QPixmap對象中。

有誰知道ImageIO類如何編碼圖像?

+0

你是否試過用Qt來閱讀它? – Mat

+0

不,我沒有。我只是試圖用GIMP和Windows圖像查看器打開它並都失敗。我認爲Qt需要一個jpg格式的圖像,而不是這種類型的編碼。 – Bemipefe

+0

爲什麼你解碼圖像只是爲了再次編碼?爲什麼不在Qt中打開圖像?或者您是否打算在Java中添加圖像處理? PS:使用'ImageIO.write(...)'將以特定於格式的默認設置對圖像進行編碼。如果你想要更多的控制,使用'ImageReader'和'ImageWriter'並指定質量設置,元數據等。 – haraldK

回答

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流。我認爲你可以獲得比這更「標準」的更多。