2

SDから大きなビットマップをロードして回転させるこの機能があります。

しかし、2 回目または 3 回目のローテーションの後、ビットマップ サイズが VM の予算を超えているというエラーが表示されます。

理由はありますか?古いビットマップをリサイクルしますね。

public void next(String s, int d)
{

if ( mBitmap!=null ) { mBitmap.recycle(); }

deg = deg + d;
mBitmap = BitmapFactory.decodeFile(s);

Matrix matrix = new Matrix();
matrix.postRotate(deg);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth() , mBitmap.getHeight(), matrix, true);

ありがとう!

4

2 に答える 2

2

ビットマップを適切に使用しないと、メモリ不足エラーが発生することは珍しくありません。

ビットマップは、特に写真のようなリッチ イメージの場合、大量のメモリを消費します。たとえば、Galaxy Nexus のカメラは、最大 2592x1936 ピクセル (5 メガピクセル) の写真を撮影します。使用されるビットマップ構成が ARGB_8888 (Android 2.3 以降のデフォルト) である場合、このイメージをメモリにロードすると、約 19MB のメモリ (2592*1936*4 バイト) が必要になり、一部のデバイスではアプリごとの制限をすぐに使い果たします。

ビットマップを効率的に使用する方法については、優れた Android ガイドがあり ます。

ガイドに従えば、目に見える品質を失うことなくメモリ消費を大幅に削減し、不必要なクラッシュを回避できるはずです。

于 2012-08-25T20:56:25.970 に答える
1

コードは問題ないようです。

ただし、この例外は、ビットマップ (解像度とビットマップ形式) のサイズ、およびその他のメモリを消費するオブジェクトにも依存します。

于 2012-08-25T20:42:20.597 に答える