Obtenez Bitmap attaché à ImageView

314

Donné

ImageView image = R.findViewById(R.id.imageView);
image.setImageBitmap(someBitmap);

Est-il possible de récupérer le bitmap?

citron
la source
1
oui, possible lorsque vous cliquez sur l'image, nous l'obtiendrons si vous le souhaitez, faites-le moi savoir.
RajaReddy PolamReddy

Réponses:

809
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Arslan Anwar
la source
34
Attention à vérifier si vous image.getDrawable()pouvez réellement lancer votre casting BitmapDrawable(à éviter IllegalCastExceptions). Si, par exemple, vous utilisez des calques dans votre image, cet extrait sera légèrement différent:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk
2
Cela retournera occasionnellement un bitmap avec tout ou partie des pixels noirs.
2
cela ne retournera pas le bitmap d'origine ni le bitmap filtré si vous avez appliqué sur le drawable / imageview.
DearDhruv
4
cela fonctionne-t-il si l'image dans ImageViewest définie à partir de URI? imageView.setImageUri()
Hendra Anggrian
1
@praneethkumar cela fonctionne dans mon scénario. Bravo pour cette réponse géniale!
Hendra Anggrian
46

Cela vous permettra d'obtenir un Bitmapde la ImageView. Cependant, ce n'est pas le même objet bitmap que vous avez défini. C'est nouveau.

imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();

=== EDIT ===

 imageView.setDrawingCacheEnabled(true);
 imageView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                   MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
 imageView.layout(0, 0, 
                  imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); 
 imageView.buildDrawingCache(true);
 Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
 imageView.setDrawingCacheEnabled(false);
Sarwar Erfan
la source
quand ça "ne marche pas", que se passe-t-il? Renvoie-t-il une exception null ou throw, ou quoi?
Sarwar Erfan,
2
il renvoie null. parfois je dois recharger la page pour qu'elle apparaisse réellement.
citron
3
Me donne un pointeur nul. :( Sur cette ligne:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot
drawingCache est déconseillé à Kotlin
Raju yourPepe
3

Écrivez ci-dessous le code

ImageView yourImageView = (ImageView) findViewById(R.id.yourImageView);
Bitmap bitmap = ((BitmapDrawable)yourImageView.getDrawable()).getBitmap();
Pankaj Talaviya
la source
je reçois AppCompatImageView ne peut pas être converti en android.graphics.drawable.BitmapDrawable
Billyjoker
1

Pour ceux qui sont à la recherche de Kotlinsolution pour obtenir Bitmapde ImageView.

var bitmap = (image.drawable as BitmapDrawable).bitmap
Asad Ali Choudhry
la source
je reçois AppCompatImageView ne peut pas être converti en android.graphics.drawable.BitmapDrawable
Billyjoker
0

Ce code est meilleur.

public static  byte[] getByteArrayFromImageView(ImageView imageView)
    {
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
        Bitmap bitmap;
        if(bitmapDrawable==null){
            imageView.buildDrawingCache();
            bitmap = imageView.getDrawingCache();
            imageView.buildDrawingCache(false);
        }else
        {
            bitmap = bitmapDrawable .getBitmap();
        }
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        return stream.toByteArray();
    }
Ahmad Aghazadeh
la source
est-ce imageView.getDrawable (); -> signifie obtenir l'image à partir d'un dossier dessinable? CMIIW .... @Ahmad
gumuruh
Non, vous pouvez utiliser ce code. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh
-3

Une autre façon d'obtenir une image bitmap d'une image est la suivante:

Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
imageView.setImageBitmap(imagenAndroid);
Hermes Trismegisto
la source
-10

essayez ce code:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Droid_Mechanic
la source
6
Pourriez-vous décrire l'amélioration par rapport à la réponse acceptée de @Arslan?
bummi
vous feriez mieux d'expliquer pourquoi votre réponse résout son problème
Muhammed Refaat