facebook twitter hatena line email

Android/画像/画像デコードエラー対応

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

画像デコード時に以下エラーが発生したときの対応

decoder->decode returned false

InputStreamのバグらしく、以下URLにある通りカスタムInputStreamを作り対応する。

http://code.google.com/p/android/issues/detail?id=6066

http://ameblo.jp/orangeapple1/entry-10900358898.html

  • Client.java
import com.google.code.FlushedInputStream;
// decoder->decode returned falseエラー対策
Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(input));
// Bitmap bitmap = BitmapFactory.decodeStream(input);
  • com/google/code/FlushedInputStream.java
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * FlushedInputStream
 * Bitmapデコード時に"decoder->decode returned false"のエラーが発生する対策用のFilterInputStream
 * http://code.google.com/p/android/issues/detail?id=6066
 */
public class FlushedInputStream extends FilterInputStream {
    public FlushedInputStream(InputStream inputStream) {
        super(inputStream);
    }
    public long skip(long n) throws IOException {
        long totalBytesSkipped = 0L;
        while (totalBytesSkipped < n) {
            long bytesSkipped = in.skip(n - totalBytesSkipped);
            if (bytesSkipped == 0L) {
                  int Byte = read();
                  if (Byte < 0) {
                      break;  // we reached EOF
                  } else {
                      bytesSkipped = 1; // we read one byte
                  }
           }
           totalBytesSkipped += bytesSkipped;
        }
        return totalBytesSkipped;
    }
}