Je voudrais définir un certain Drawable
comme fond d'écran de l'appareil, mais toutes les fonctions de fond d'écran acceptent Bitmap
uniquement les s. Je ne peux pas l'utiliser WallpaperManager
car je suis pré 2.1.
De plus, mes drawables sont téléchargés sur le Web et ne résident pas R.drawable
.
Réponses:
Ce morceau de code aide.
Voici une version où l'image est téléchargée.
la source
la source
getIntrinsicWidth()
etgetIntrinsicHieght()
retournera -1 si drawable est de couleur unie.Cela convertit un BitmapDrawable en un Bitmap.
la source
BitmapDrawable
avant de le lancer:if (d instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); }
d
déjà est unBitmapDrawable
, auquel cas il est trivial de le récupérer sous forme de bitmap ... se bloque avecClassCastException
dans tous les autres cas.Un
Drawable
peut être dessiné sur unCanvas
, et unCanvas
peut être soutenu par unBitmap
:(Mis à jour pour gérer une conversion rapide pour
BitmapDrawable
s et pour s'assurer que leBitmap
créé a une taille valide)la source
MÉTHODE 1 : Soit vous pouvez directement convertir en bitmap comme celui-ci
MÉTHODE 2 : Vous pouvez même convertir la ressource en dessin et à partir de là, vous pouvez obtenir un bitmap comme celui-ci
Pour la méthode API> 22
getDrawable
déplacée dans laResourcesCompat
classe, pour cela vous faites quelque chose comme çala source
android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
très simple
la source
Donc, après avoir regardé (et utilisé) les autres réponses, il semble qu'elles se comportent toutes
ColorDrawable
etPaintDrawable
mal. (Surtout sur la sucette) semblait queShader
s étaient modifiés donc les blocs de couleurs solides n'étaient pas manipulés correctement.J'utilise maintenant le code suivant:
Contrairement aux autres, si vous faites appel
setBounds
àDrawable
avant de demander de le transformer en bitmap, il dessinera le bitmap à la bonne taille!la source
Drawable
n'a pas de limites définies, il utilise leIntrinsicWidth/Height
. S'ils sont tous les deux <= 0, nous définissons le canevas sur 1 px. Vous avez raison si leDrawable
n'a pas de limites, il en sera transmis (1x1 dans la plupart des cas), mais cela est REQUIS pour des choses comme cellesColorDrawable
qui n'ont PAS de tailles intrinsèques. Si nous ne le faisions pas, cela lancerait unException
, vous ne pouvez pas dessiner 0x0 sur un canevas.mutate()
ferait une copie en laissant l'original dessinable seul, ce qui éliminerait le problème du retour dans les limites d'origine. Je dois rarement changer le code en fonction de ces points. Si votre cas d'utilisation l'exige, ajoutez une autre réponse. Je vous suggère de créer une autre question pour la mise à l'échelle Bitmap.Peut-être que cela aidera quelqu'un ...
De PictureDrawable à Bitmap, utilisez:
... mis en œuvre comme tel:
la source
Drawable
, dans ce cas aPictureDrawable
.Voici une meilleure résolution
Code de Comment lire les bits dessinables comme InputStream
la source
1) dessinable sur Bitmap:
2) bitmap à Drawable:
la source
Voici la belle version Kotlin de la réponse fournie par @ Chris.Jenkins ici: https://stackoverflow.com/a/27543712/1016462
la source
android-ktx a une
Drawable.toBitmap
méthode: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.htmlDepuis Kotlin
la source
VectorDrawable
dans Kotlin! Également partagé dans cet article SO ici plus en détail.Android fournit une solution foward non linéaire:
BitmapDrawable
. Pour obtenir le bitmap, nous devons fournir l'ID de ressourceR.drawable.flower_pic
à l'unBitmapDrawable
, puis le convertir en aBitmap
.la source
Utilisez ce code.it vous aidera à atteindre votre objectif.
la source
BitmapFactory.decodeResource()
redimensionne automatiquement le bitmap, de sorte que votre bitmap peut devenir flou. Pour éviter la mise à l'échelle, procédez comme suit:ou
la source
La dernière bibliothèque de base androidx (androidx.core: core-ktx: 1.2.0) a maintenant une fonction d'extension:
Drawable.toBitmap(...)
pour convertir un Drawable en Bitmap.la source
si vous utilisez kotlin, utilisez le code ci-dessous. ça va marcher
// pour utiliser le chemin de l'image
la source
la source
La bibliothèque ImageWorker peut convertir un bitmap en dessinable ou en base64 et vice versa.
la mise en oeuvre
Au niveau du projet Gradle
Au niveau de l'application Gradle
Vous pouvez également stocker et récupérer des images bitmaps / drawables / base64 de l'extérieur.
Vérifier ici. https://github.com/1AboveAll/ImageWorker/edit/master/README.md
la source