私は次のようなリソースからビットマップをロードしています:
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image);
私がやりたいのは、drawメソッドでメインキャンバスに描画される前にビットマップにいくつかの変更を加えることです(変更されないときにメインループで多くの描画を繰り返すのは無駄に思えるので)。私は次のようにビットマップに変更を加えています:
Canvas c = new Canvas(mBackground);
c.drawARGB(...); // etc
だから当然私は例外を得る
java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
それを避けるために、ビットマップのコピーを作成して変更可能にしました
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true);
問題を回避しますが、OutOfMemoryExceptionsが発生することがありますが、私が望むことを達成するためのより良い方法を知っていますか?