Ottieni Bitmap collegata a ImageView


314

Dato

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

È possibile recuperare la bitmap?


1
sì, possibile quando clicchi sull'immagine lo otterremo se vuoi questo requisito fammelo sapere.
RajaReddy PolamReddy

Risposte:


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

34
Fai attenzione a verificare se image.getDrawable()puoi effettivamente lanciare BitmapDrawable(per evitare IllegalCastExceptions). Se, ad esempio, usi i livelli nell'immagine, questo frammento sarà leggermente diverso:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk,

2
Questo, occasionalmente, restituisce una bitmap con alcuni o tutti i pixel neri.

2
questo non restituirà la bitmap originale né la bitmap filtrata se è stata applicata su drawable / imageview.
DearDhruv,

4
funziona se l'immagine in ImageViewè impostata da URI? imageView.setImageUri()
Hendra Anggrian,

1
@praneethkumar funziona nel mio scenario. Complimenti per questa fantastica risposta!
Hendra Anggrian,

46

Questo ti darà un Bitmapdal ImageView. Tuttavia, non è lo stesso oggetto bitmap che hai impostato. È nuovo.

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

=== MODIFICA ===

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

quando "non funziona", cosa succede? Restituisce null o genera un'eccezione o cosa?
Sarwar Erfan,

2
restituisce null. a volte devo ricaricare la pagina perché appaia davvero.
Limone

3
Mi dà un puntatore nullo. :( Su questa linea:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

drawingCache è deprecato in Kotlin
Raju yourPepe il

3

Scrivi sotto il codice

ImageView yourImageView = (ImageView) findViewById(R.id.yourImageView);
Bitmap bitmap = ((BitmapDrawable)yourImageView.getDrawable()).getBitmap();

ottengo AppCompatImageView non può essere trasmesso su android.graphics.drawable.BitmapDrawable
Billyjoker

1

Per chi è alla ricerca di una Kotlinsoluzione da cui Bitmappartire ImageView.

var bitmap = (image.drawable as BitmapDrawable).bitmap

ottengo AppCompatImageView non può essere trasmesso a android.graphics.drawable.BitmapDrawable
Billyjoker

0

Questo codice è migliore

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

è imageView.getDrawable (); -> significa ottenere l'immagine dalla cartella estraibile? CMIIW .... @Ahmad
gumuruh,

No. Puoi usare questo codice. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh,

-3

Un altro modo per ottenere una bitmap di un'immagine sta facendo questo:

Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
imageView.setImageBitmap(imagenAndroid);

-10

prova questo codice:

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

6
Potresti descrivere il miglioramento rispetto alla risposta accettata di @Arslan?
bummi,

faresti meglio a spiegare perché la tua risposta risolve il suo problema
Muhammed Refaat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.