7

JPEG 画像のリモート ストリームを開いて Bitmap オブジェクトに変換しようとしています。

    BitmapFactory.decodeStream(
new URL("http://some.url.to/source/image.jpg")
.openStream());

デコーダーは null を返し、ログに次のメッセージが表示されます。

DEBUG/skia(xxxx): --- decoder->decode returned false

注:
1. コンテンツの長さはゼロではなく、コンテンツの種類はimage/jpeg
2 です。ブラウザで URL を開くと、画像が表示されます。

ここで私が見逃しているのは何ですか?

助けてください。ありがとう。

4

4 に答える 4

10

android bug n°6066で提供されている解決策は、std FilterInputStream をオーバーライドしてから BitmapFactory に送信することです。

static class FlushedInputStream extends FilterInputStream {
    public FlushedInputStream(InputStream inputStream) {
    super(inputStream);
    }

    @Override
    public long skip(long n) throws IOException {
        long totalBytesSkipped = 0L;
        while (totalBytesSkipped < n) {
            long bytesSkipped = in.skip(n - totalBytesSkipped);
            if (bytesSkipped == 0L) {
                  int byteValue = read();
                  if (byteValue < 0) {
                      break;  // we reached EOF
                  } else {
                      bytesSkipped = 1; // we read one byte
                  }
           }
           totalBytesSkipped += bytesSkipped;
        }
        return totalBytesSkipped;
    }
}

そして、decodeStream 関数を使用します。

Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(inputStream));

私が見つけた他の解決策は、単純に BufferedInputStream を BitmapFactory に与えることです:

Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(inputStream));

これらの 2 つのソリューションでうまくいくはずです。

詳細については、バグ レポートのコメントを参照してください: Android バグ番号 6066

于 2011-03-22T18:19:28.683 に答える
3

ストリームと Android の処理方法に問題があったようです。このバグ レポートのパッチは、今のところ問題を解決しました。

于 2010-05-09T03:53:01.460 に答える