InputStream から受け取った画像をダウンサンプリングする必要があります。これは、ある URL から受信した画像であり、非常に小さい場合も非常に大きい場合もあります。この画像をメモリに収めるには、ダウンサンプリングする必要があります。まず、 を使用して画像サイズを取得し、inJustDecodeBounds
必要なサンプルを計算します。次に、このサンプルを で指定して、ダウンサンプリングされたビットマップを作成しBitmapFactory.Options.inSampleSize
ます。この 2 段階のデコードには を 2 回呼び出す必要がありdecodeStream()
、問題なく動作します。
これは、SD カードからのファイルに対しては問題なく機能します。ただし、この場合、入力ストリームをリセットできないため、decodeStream()
2 回呼び出すことはできません。入力ストリームのクローンも、サイズが大きいためオプションではありません。別の方法として、同じ URL に対して 2 つの HTTP リクエストを作成することもできます。最初に画像サイズを取得し、次にダウンサンプリングを使用して実際の画像をデコードしますが、この解決策はかなり醜いようです。
リセットできないストリームを再利用できますか? または、この問題に対する既知の回避策を提案してください。