1

Androidの場合、画像をメモリにロードするときに、通常行うRAMの制限を超えないようにします

BitmapFactory.Options bounds = new BitmapFactory.Options();
bounds.inJustDecodeBounds = true;

次に、ビットマップをデコードしてその幅を見つけ、それに基づいてサンプリングするかどうかを決定できます。

私の質問は、ローカルストレージ(SDカード)からビットマップをロードしている場合、ビットマップのファイルの場所を取得できないということです。

   File file = new File(mPathToFile);

次に確認します

   if(file.length()>MAX){

   sampleSize = 2;//2 is just an example
   BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = sampleSize;
    bitmap = BitmapFactory.decodeFile(mPathToFile, options);
    }

これは間違っていますか?愚か?

4

3 に答える 3

2

これは間違っていますか?愚か?

いいえ、しかしそれはあまりにも不正確かもしれません。JPGやPNGなどの画像ファイルはの圧縮表現であるため、バイト単位のファイルサイズは通常、メモリ内の実際の画像サイズを表しませんBitmap。したがって、ファイルサイズは画像サイズに直接リンクされていません(比例していますが、50K JPGファイルが250x250ピクセルになるとは限りません)。

Bitmapこれは、ディスク上の50KBは、圧縮されているため、メモリ内で一度膨らませた50KBを意味するわけではないことも意味します。画像自体は、メモリ内で300KB(またはそれ以上)に近づく可能性があります(ARGB_8888の要件はおおよそW * H * 4バイトですBitmap)。

バウンドデコードを実行すると、画像の実際のサイズ(したがって、プログラムで実際に使用するメモリの量)に基づいてこの決定を行うことができます。

于 2012-12-02T19:25:31.300 に答える
1

ビットマップの処理に使用されるヒープメモリは、ファイルの物理的なサイズ/長さではなく、画像の解像度にリンクされていることを理解しています。

私の理解では、解像度1280 x 800の画像Aは、640 x 400の画像Bよりも多くのヒープを使用/必要とします。また、品質によっては、BのファイルサイズがAより大きくなる場合があります。間違っている場合は修正してください。

于 2012-12-02T19:19:17.397 に答える
0

同様のトピックに関するAndroidドキュメント大きなビットマップを効率的にロードする

于 2012-12-02T19:38:59.237 に答える