4

ビットマップの操作を含むプロジェクトに取り組んでいます。私は OutofMemoryError を持ちたくないので、未使用のビットマップをそれぞれリサイクルしようとしています。残念ながら、リサイクルしすぎて、「リサイクルされたビットマップを使用しようとしています」というエラーが発生しました。

私は使っている:

 Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
 Bitmap.createScaledBitmap(bmp, w, h,true);

このメソッドの後に bmp をリサイクルする必要がありますか、それともリサイクルされますか? お気に入り:

Bitmap newBitmap = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
bmp.recycle();

imageView.setImageBitmap() の直後に、以前ここで使用されていたものをリサイクルできますか? 例えば

myImageView.setImageBitmap(myBitmap);
myImageView.setImageBitmap(newBitmap);
myBitmap.recycle();

ご協力ありがとう御座います。

4

3 に答える 3

1

ビットマップは使い終わった後にのみリサイクルし、それらのデータを二度と使用する必要がないと確信できます。これは、ビットマップを処理するときにメモリを増やすために好きな場所で使用できる魔法の方法ではありません。

于 2012-07-10T17:14:11.770 に答える
0

ビットマップをスケーリングする場合は、同じ参照を使用します。

Bitmap bmp = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false); 

最初のビットマップ オブジェクトが参照 "bmp" を失うと、GC (ガベージ コレクター) によって削除されるため、何もリサイクルする必要はありません。画像ビューに関しては、そのソースを「newBitmap」に参照するだけで、独自のものは作成しません。

于 2012-07-10T18:06:07.083 に答える