Aller au contenu

Transformer un drawable en bitmap


Profete162

Recommended Posts

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.

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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.) ;)

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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...