Immutable bitmap crash error

You have to convert your workingBitmap to Mutable Bitmap for drawing on Canvas. (Note: this method does not help save memory, it will use extra memory)

Bitmap workingBitmap = Bitmap.createBitmap(chosenFrame);
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(mutableBitmap);

This answer helps don't waste memory Convert immutable bitmap to a mutable bitmap


BitmapFactory.decodeResource() returns an immutable copy of the bitmap and you cannot draw to its canvas. In order to get its canvas, you need to get a mutable copy of the images' bitmap and that can be done with single line code addition.

opt.inMutable = true;

Add that line to your code and it should address the crash.


Unless you don't want to make your IMMUTABLE bitmap to MUTABLE bitmap, you can save memory by ALWAYS REUSING THE BITMAP

workingBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(workingBitmap);

However I think this may be same as making the bitmap mutable by calling

workingBitmap.isMutable = true