web-dev-qa-db-ja.com

IllegalArgumentException:ソースラスターバンドとソース色空間コンポーネントの数が一致しないカラー画像の場合例外

誰かが提案した上記の答えは、私のカラー画像を白黒画像に変換します。ですから、私の質問にはふさわしくありません。

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

これがコードで、以下が画像です。画像をダウンロードしてPCに保存します。そして、パスの正しい値で上記のコードを実行しようとすると、トピックで例外がスローされます

画像のダウンロード: https://skydrive.live.com/?cid=19547371C4F3B839&id=19547371C4F3B839%21105

誰かが画像からJava.awt.image.BufferedImageオブジェクトを取得できれば、それで十分です(画像をグレースケールに変換しないでください)。

あなたがこれに答えることができればあなたは天才です:D。 Plzヘルプ。

13

ここのコードに問題はありません。 ImageIO用の JPEGImageReader プラグインを使用して画像を読み取ることができます。このイメージリーダーは、JPEGエラーに寛容であろうとし、標準のJava JPEGImageReaderよりもわずかに機能が優れています。

ただし、JPEGファイルにはいくつかの問題があるようで、100%読み取ることができません。

  • まず、画像のICCカラープロファイルには4つの色成分がありますが、画像データには3つの色成分しかありません(これにより、表示される例外が発生します)。根本的な原因は、おそらく変換ソフトウェアの不良です。 ExifToolまたは同様のソフトウェアを使用して、メタデータを調べてさらに調査します。私の読者は単にICCプロファイルを無視します。
  • 次に、JPEGストリームが途中で終了します(EOIがありません)。画像の右下にゴミのピクセルがいくつかあることに気付くでしょう。元の画像を取得する以外にできることは何もありません(実際には、画像にはサムネイルが含まれており、サムネイルは破損していません。本当に必要な場合は、そこからデータを再作成してみてください)。リーダーから返された画像は、ネイティブソフトウェアで読み取られた画像と一致しています。
26
haraldK