J2MEでこれを試しました
try {
Image immutableThumb = Image.createImage( temp, 0, temp.length);
} catch (Exception ex) {
System.out.println(ex);
}
このエラーが発生しました:
java.lang.IllegalArgumentException:
これを解決するにはどうすればよいですか?
J2MEでこれを試しました
try {
Image immutableThumb = Image.createImage( temp, 0, temp.length);
} catch (Exception ex) {
System.out.println(ex);
}
このエラーが発生しました:
java.lang.IllegalArgumentException:
これを解決するにはどうすればよいですか?
ドキュメントを見てみましょう: IllegalArgumentException がスローされます
imageData が正しくフォーマットされていないか、デコードできない場合
そのため、考えられる理由は、サポートされていない画像形式か、データが切り捨てられた可能性があります。すべてのヘッダーを含むファイル全体をそのメソッドに渡す必要があることに注意してください。形式に疑問がある場合は、PNGを選択することをお勧めします。いずれにせよサポートされている必要があります。
Image.createImage() は、最初の引数の形式が正しくないか、デコードできない場合、IllegalArgumentException をスローします。(temp は byte[] であると想定しています)。
(このURLはなぜかハイパーリンクになっていません(?))
詳細や周囲のコードがなければなんとも言えませんが、最初に疑ったのは、読み込もうとしているファイルがデバイスでサポートされていない形式であるということです。
MIDLETでも同じ問題が発生しました。私の場合の問題は、ソケットのInputStreamから読み取ったJPEG画像に付随するHTTPヘッダーでした。そして、2バイトで識別されるJPEG SOIマーカーを見つけることでそれを解決しました:FFD8
私のバイト配列で。次に、バイト配列での場所を見つけたらFFD8
、HTTPヘッダーを表す開始バイトをトリミングし、createImage()
例外をスローせずに呼び出すことができます...
これが当てはまるかどうかを確認する必要があります。これが正しいかどうかを確認してください。そう(temp[0] == 0xFF && temp[1] == 0xD8)
でない場合は、の先頭をトリミングして、temp
HTTPヘッダーまたはその他のジャンクを削除してください...
PS
JPEG画像を読んでいると思いますが、そうでない場合は、temp
配列内の適切なヘッダーを探してください。
また、これが役に立たず、JPEG画像を読んでいる場合は、配列が(EOIマーカーである)で始まり、FFD8
で終わることを確認してください。FFD9
そして、それがEOIで終わらない場合は、SOIで説明したように端をトリミングするだけです...
PPS
また、入力されたデータtemp
が有効であることがわかった場合、プラットフォームはJPEG画像をデコードできないか、入力された画像がtemp
JPEGデコーダーに対して大きすぎます。