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.