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?


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

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

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

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

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();
    }

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

-10

essayez ce code:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.