1

InputStream から受け取った画像をダウンサンプリングする必要があります。これは、ある URL から受信した画像であり、非常に小さい場合も非常に大きい場合もあります。この画像をメモリに収めるには、ダウンサンプリングする必要があります。まず、 を使用して画像サイズを取得し、inJustDecodeBounds必要なサンプルを計算します。次に、このサンプルを で指定して、ダウンサンプリングされたビットマップを作成しBitmapFactory.Options.inSampleSizeます。この 2 段階のデコードには を 2 回呼び出す必要がありdecodeStream()、問題なく動作します。

これは、SD カードからのファイルに対しては問題なく機能します。ただし、この場合、入力ストリームをリセットできないため、decodeStream()2 回呼び出すことはできません。入力ストリームのクローンも、サイズが大きいためオプションではありません。別の方法として、同じ URL に対して 2 つの HTTP リクエストを作成することもできます。最初に画像サイズを取得し、次にダウンサンプリングを使用して実際の画像をデコードしますが、この解決策はかなり醜いようです。

リセットできないストリームを再利用できますか? または、この問題に対する既知の回避策を提案してください。

4

1 に答える 1

1

ストリームを再利用したくない場合は、明らかに RAM または SD カードに保存する必要があります。これは、ネットワーク InputStream (バッファリングされていないと仮定します) がダウンロード データを保持していないためです。

したがって、前に述べたように、これを回避するオプションは、画像が本当に巨大になる可能性がある場合、画像をSDカードに直接保存することです(おそらく一時ディレクトリに)。

于 2012-11-16T14:09:54.010 に答える