Je charge un bitmap à partir d'une ressource telle que:
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image);
Ce que je veux faire, c’est d’apporter quelques modifications au bitmap avant qu’il ne soit dessiné dans le canevas principal de ma méthode draw ( va changer). J'apporte les modifications au bitmap avec les éléments suivants:
Canvas c = new Canvas(mBackground);
c.drawARGB(...); // etc
Alors naturellement, je reçois une exception
Java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
Donc, pour éviter que je fasse une copie du bitmap afin qu'il soit mutable
Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true);
Qui évite le problème, mais cela cause parfois des exceptions OutOfMemoryExceptions, connaissez-vous de meilleurs moyens d’atteindre ce que je veux?
Il existe plusieurs façons de créer une copie de celui-ci. Ce fil pourrait vous aider: http://www.anddev.org/how_to_modify_the_image_file-t513.html
Utilisez decodeResource(Resources res, int id, BitmapFactory.Options opts)
et spécifiez inMutable
dans les options.
http://developer.Android.com/reference/Android/graphics/BitmapFactory.html
Vous feriez mieux d'utiliser RapidDecoder .
import rapid.decoder.BitmapDecoder;
Bitmap mBackground = BitmapDecoder.from(res, R.drawable.image)
.mutable().decode();
Fonctionne pour API niveau 8.
si vous avez besoin de gérer tous les niveaux de l'API, consultez ce post: