2013-08-21 79 views
6

有人建議的上述答案將我的彩色圖像轉換爲黑白圖像。所以這不適合我的問題。IllegalArgumentException:源光柵條帶數量和源顏色空間組件不匹配對於彩色圖像例外

File file = new File("path");   
BufferedImage bufferedImage = ImageIO.read(file); 

這裏是代碼,下面是圖像。下載圖像並保存在您的電腦上。並嘗試運行與路徑的正確值上面的代碼,它會在主題中拋出一個異常

下載圖片:https://skydrive.live.com/?cid=19547371C4F3B839&id=19547371C4F3B839%21105

簡單,如果有人可以從獲得一個java.awt.image.BufferedImage對象給定的圖像足夠了(不應該將圖像轉換爲灰度圖像)。

如果你能回答這個問題,你是一個天才:D。 Plz的幫助。

+0

可能重複http://stackoverflow.com/questions/10416378/imageio-read-illegal-argument-exception-raster-bands-colour-space-components –

+0

喜菲利普請閱讀我的問題提得好。我已經明確提到「不應該將圖像轉換爲灰度圖像」。您建議的答案是將我的彩色圖像轉換爲灰度圖像(黑白),如果您想要,請嘗試一下並看看。並且不要提出其他問題,也不要給我 - 不要嘗試它。對你的評論負責。 –

+0

@PhilippSander雖然相似,但這張圖片的問題與您鏈接的不同。 – haraldK

回答

15

這裏的代碼沒有問題。我可以使用我的用於ImageIO的JPEGImageReader插件來讀取您的圖像。這個圖像閱讀器試圖對JPEG錯誤寬容,並且比標準的Java JPEGImageReader稍微強大一些。

但是,您的JPEG文件似乎有一些問題,所以它不能被讀取100%:

  • 首先,圖像中的ICC色彩配置文件有4個顏色分量,而圖像數據只有3種顏色成分(這是導致你看到的例外)。根本原因可能是糟糕的轉換軟件。使用ExifTool或類似的軟件查看元數據以便進一步調查。我的讀者會忽略ICC配置文件。
  • 其次,JPEG流過早結束(缺少EOI)。你會注意到圖像右下方有一些垃圾像素。除了獲取原始圖像之外,沒有什麼可以做的(除此之外,實際上,圖像包含縮略圖並且縮略圖未損壞;如果您真的需要,可以嘗試重新創建數據)。從我的閱讀器返回的圖像與本機軟件讀取的圖像一致。
+0

嗨Harald非常感謝您的回答。現在這個錯誤很明顯,謝謝解釋。我試圖使用你的插件,但由於一些缺少的依賴庫,我無法編譯它(我添加了一些12monkeys-imageio jar)。所以你介意解釋使用插件的確切方式,如果你能展示簡單的代碼示例爲我的圖像緩衝,那將會很好。 –

+2

有關如何在java應用程序和servlet容器中使用插件的詳細信息可以在這裏找到:https://github.com/haraldk/TwelveMonkeys –

+0

工作就像一個魅力:) – DominikAngerer