androidでアルファチャンネル付きのjpegをdecodeStreamするとnullが返ってくる?
web経由で画像をダウンロードしようと思い、以下のようなコードを書いた。
URL imageUrl = new URL("URL"); InputStream imageIs = imageUrl.openStream(); image = BitmapFactory.decodeStream(imageIs); imageIs.close();
大抵の画像は取得できるものの、10枚中1枚ほどimageがnullになる問題に悩まされていた。
LogCatにはこのような文が。
09-18 20:02:52.957: D/skia(8343): --- decoder->decode returned false
問題をググってみるが、
InputStream imageIs = imageUrl.openStream();
の部分の書き換えが主で解決しなかった。
ならばと思い、取得失敗したものと、成功したもののを見比べてみると、失敗したものはアルファチャンネル付きのjpegであった。(アルファチャンネルは付いていなかったが色空間がRGBではないものも取得失敗しているケースがあった。)
いずれにせよ、decodeStream時にアルファチャンネルや色空間が原因でデコード失敗してるのかなぁ…
追記
http://stackoverflow.com/questions/5626795/how-to-get-a-bitmap-from-a-raw-image
これを見るとandroidのBitmapは「グレースケールのBitmapには対応していない」「アルファ要素を0にしろ(?)」と書いてある。
そもそもjpgがアルファチャンネルに対応してないこともわかった。
ListViewに画像を表示するつもりだったので、imageがnullだった時に、何かしらの画像に差し替える事で応急処置。