質問

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を開くと、画像が表示されます。

私がここに欠けていることは何ですか?

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

役に立ちましたか?

解決 2

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

他のヒント

で提供されるソリューション Androidバグ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;
    }
}

次に、デコデストリーム関数を使用します。

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

私が見つけたもう1つの解決策は、BufferedInputStreamをBitMapFactoryに単純に与えることです。

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

これらの2つのソリューションはトリックを行う必要があります。

詳細については、バグレポートのコメントをご覧ください。 AndroidバグNo.6066

私にとって問題は画像の色のタイプです:あなたのイメージは色= rgbではないcymkです

Android Skiaが失敗する画像を開くことができるライブラリを見つけました。特定のユーザーケースには役立ちます。

https://github.com/suckgamony/rapiddecoder

私にとっては、私が一度に多くの画像をロードしておらず、私がロードする多くの画像にICCプロファイルを持っているので、それは問題を解決しました。 PicassoやGlideなどの一般的なライブラリと統合してみませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top