Profete162 Posté(e) 13 janvier 2010 Share Posté(e) 13 janvier 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kuiplo Posté(e) 13 janvier 2010 Share Posté(e) 13 janvier 2010 (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é 13 janvier 2010 par Kuiplo Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 13 janvier 2010 Share Posté(e) 13 janvier 2010 la seconde est utilisée partout dans le home android....c'est du standard et ça tourne niquel. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 13 janvier 2010 Auteur Share Posté(e) 13 janvier 2010 (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é 13 janvier 2010 par Profete162 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kuiplo Posté(e) 13 janvier 2010 Share Posté(e) 13 janvier 2010 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é) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 13 janvier 2010 Share Posté(e) 13 janvier 2010 Le cast de la première soluce risque de lanver une ClassCastException si ce n'est pas un BitmapDrawable. -- Posté depuis BBFoC Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 14 janvier 2010 Share Posté(e) 14 janvier 2010 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.) ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kuiplo Posté(e) 14 janvier 2010 Share Posté(e) 14 janvier 2010 (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é 14 janvier 2010 par Kuiplo Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.