Jump to content

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.

Link to comment
Share on other 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.

Edited by Kuiplo
Link to comment
Share on other 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!

Edited by Profete162
Link to comment
Share on other 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.) ;)

Link to comment
Share on other 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 ;)

Edited by Kuiplo
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...