1

bitmapfactory.decodestream を使用してインターネットから画像を読み込む際に問題が発生しました。たとえば、この画像: https://portal.apprenticexm.nl/appportal/public/apps/1/media/807162_88149365.jpg

サイズは 100 KB をわずかに超えていますが、bitmapfactory.decodestream のエラーは、20 MB 以上を割り当てようとしたことを示しています。ビットマップ サイズ=23756KB)

誰かがこの問題に光を当てることができることを願っています。

ベスト、ピーター

4

2 に答える 2

4

Alex Orlovが述べたように、「ディスク上のサイズは、メモリ内のビットマップのサイズとは関係ありません。最初のケースでは、画像は圧縮されていますが、ビットマップは、ピクセルの生のセットにすぎません。」ただし、RAW画像として保存されていることを考慮しても、20MBはかなり多すぎます。ピクセルあたり4Bを考えると、それは5Mpixの画像になりますが、投稿した画像は間違いなく小さくなります。

同様の問題がありました。RAW形式で8MBの画像を読み込んでいましたが、32MBが割り当てられていました。後で、これはdpiスケーリングが原因であることがわかりました。「ドローアブル」フォルダに画像がある場合は、現在の画面のdpiに応じて自動的に拡大縮小されます。XHDPI画面を使用しているので、画像が水平方向に2倍、垂直方向に2倍に拡大縮小されたため、4倍のメモリが必要になりました。

dpiの仕組みについて詳しくは、http://developer.android.com/guide/practices/screens_support.htmlをご覧ください。

この自動Android機能を使用して画像を自分で拡大縮小したくない場合は、「drawable」フォルダーの名前を「drawable-nodpi」に変更するだけです。「nodpi」のタグが付けられた「drawable」フォルダ内のすべての画像がそのまま読み込まれます。

于 2012-11-08T14:26:39.720 に答える
0

ディスク上のサイズは、メモリ内のビットマップのサイズとは関係ありません。最初のケースでは、画像が圧縮されます。一方、ビットマップは単なる生のピクセルのセットです。イメージ構成なども考慮する必要があります。私の記憶が正しければ、jpg はアルファ チャネルをサポートしていないため、Android のデフォルト設定である ARGB_8888 よりも軽量です。

BitmapFactory.Options で画像のロード方法を制御できます

于 2012-08-29T08:32:42.217 に答える