2011-12-06 6 views
0

J'essaie de dessiner un peu plus de mon contenu ImageView, qui est représenté par Drawable à partir de ressources. Je sais que tous les Drawable s des ressources sont immuables par défaut, mais même après que j'appelle la méthode mutable() et obtenir Bitmap à partir de ce Drawable pour le passer à Canvas objet que je reçois java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor. Voici le code:Modification de bitmap à partir des ressources

Drawable homeImage = mHomeImage.getBackground(); // my ImageView 
homeImage.mutate(); 
Canvas c = new Canvas(((BitmapDrawable)homeImage).getBitmap()); 

Est-il possible de modifier cette Bitmap sans le créer est la copie?

Répondre

1

Essayez cette

Bitmap bmp1 = (((BitmapDrawable)homeImage).getBitmap()) 
     .copy(Config.ARGB_8888, true); 
Canvas c = new Canvas(bmp1); 

Vous devez créer une nouvelle image pour la toile. Comme la toile utilise le bitmap que nous passons pour stocker ce qui est dessiné, le bitmap devrait être mutable.

+0

Merci de répondre, mais comme vous le voyez, j'ai demandé: Y a-t-il un moyen de modifier ce bitmap ** sans créer sa copie **? – teoREtik

+0

J'ai vu votre question plus tôt. Je viens de mettre le code ci-dessus car le code de votre question ne fonctionnera pas. Et je ne pense pas que vous pouvez modifier un bitmap sans en créer une copie. Si vous essayez de dessiner quelque chose au-dessus d'une imageview. Créez un nouveau bitmap et dessinez le nouveau contenu dans le nouveau bitmap, puis utilisez framelayout pour empiler les vues les unes sur les autres. Il apparaîtra comme une vue unique. – blessenm

+0

Non, ma cible est de dessiner l'état du signal wifi sur le dessus de l'image, en écoutant la vitesse du réseau toutes les 3 secondes et j'ai peur de la consommation de mémoire dans le cas de copier Bitmap, merci de répondre. – teoREtik

Questions connexes