Aller au contenu

Transformer un drawable en bitmap


Recommended Posts

Posté(e)

Salut à tous,

J'ai une petite question (urgente) pour vous.

Ma nouvelle appli est prête et va bientôt arriver sur le marke, mais il me reste un petit soucis d'images.

Je récupère ces images par une méthode qui me renvoie un Drawable, et je les affiches via une méthode qui n'accepte qu'un Bitmap en paramètre.

Cela fait maintenant 2 jours que je suis sur le coup et impossible de trouver comment faire.

J'ai compris comment transformet un Bitmap en drawable par 2 méthodes différentes

BitmapDrawable et ce code:

Canvas canvas = new Canvas(bitmap); 
drawable.setBounds(0, 0, width, height); 
drawable.draw(canvas);

Mais impossible de faire l'inverse!

Par pitié, aidez moi car ca me broute vraiment.

Posté(e) (modifié)

Alors 2 solutions selon moi :

  • La plus simple (à tester, je ne sais pas si ça va marcher) : Tu cast ton Drawable en BitmapDrawable et tu fais un getBitmap ().

Drawable iconDrawable = ....;
Bitmap iconBitmap = null;
DrawableBitmap iconDrawableBitmap = (DrawableBitmap) iconDrawable;
if (iconDrawableBitmap != null)
   iconBitmap = iconDrawableBitmap .getBitmap ();
if (iconBitmap != null)
   // Ca marche :)

  • Solution un peu plus tricky :

Drawable iconDrawable = ....;
Bitmap iconBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);  // A vérifier si c'est la bonne config à utiliser
Canvas canvas = new Canvas(bitmap); 
drawable.setBounds(0, 0, width, height); 
drawable.draw(canvas);
// Ton drawable se retrouvera comme par magie dans ton bitmap iconBitmap 

Si la première marche pas, la seconde marchera.

Modifié par Kuiplo
Posté(e) (modifié)

ptain, en fait, j'avais la solution dans mon post!

C'est affolant comme il me manque pas grand chose...

2 jours de boulot pour me rendre compte que j'y étais quasi! C'est trop frustrant!!!!

PS: la première fonction marche à merveille!

Modifié par Profete162
Posté(e)

La première solution est plus simple mais elle peut ne pas marcher dans certains cas, donc vérifie bien que ton DrawableBitmap n'est pas à null suite au cast (et vérifie aussi le bitmap retourné)

Posté(e)

La première "solution" n'est pas une solution puisqu'elle n'est pas "safe" (ClassCastException). Kuiplo, si ton cast foire c'est une Exception que tu auras, pas un null. La seconde solution est parfaitement adaptée :)

Si tu souhaites obtenir un Bitmap à partir d'une image, tu peux aussi utiliser la classe BitmapFactory qui est très utile et moins consommateur de ressources (pas de nouveau Canvas, etc.) ;)

Posté(e) (modifié)

Ha oui c'est vrai qu'en java ça déclenche une exception. Bah tu fais un try/catch, c'est pareil ;)

En ce qui concerne les perfs, il faut tester qu'est-ce qui est plus rapide et consommateur. Peut-être vaut-il mieux faire un try/catch avec la premier solution et si tu as une erreur et bien tu utilises la seconde solution, ou bien peut-être il vaut mieux utiliser direct la seconde solution.

En ce qui concerne le BitmapFactory, c'est pratique quand tu utilises tes propres images (avec les id), mais là étant donné qu'il s'agit de Drawable, je ne sais pas comment faire pour passer par le BitmapFactory (Peut être avec un InputStream ?)

Bref là, c'est à toi de tester Profete ;)

Modifié par Kuiplo

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...