Obtener mapa de bits adjunto a ImageView


314

Dado

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

¿Es posible recuperar el mapa de bits?


1
sí, es posible cuando hagas clic en la imagen y obtendremos que si quieres este requisito, házmelo saber.
RajaReddy PolamReddy

Respuestas:


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

34
Tenga cuidado de verificar si image.getDrawable()realmente puede ser lanzado a BitmapDrawable(para evitar IllegalCastExceptions). Si, por ejemplo, usa capas en su imagen, este fragmento será ligeramente diferente:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk

2
Esto ocasionalmente devolverá un mapa de bits con algunos o todos los píxeles negros.

2
esto no devolverá el mapa de bits original ni el mapa de bits filtrado si ha aplicado en la vista dibujable / de imagen.
DearDhruv

44
¿funciona esto si ImageViewse establece la imagen en URI? imageView.setImageUri()
Hendra Anggrian

1
@praneethkumar funciona en mi escenario. ¡Gracias por esta increíble respuesta!
Hendra Anggrian

46

Esto te conseguirá una Bitmapde la ImageView. Sin embargo, no es el mismo objeto de mapa de bits que ha establecido. Es uno nuevo.

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

=== EDITAR ===

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

cuando "no funciona", ¿qué pasa? ¿Devuelve nulo o arroja una excepción o qué?
Sarwar Erfan

2
devuelve nulo. a veces tengo que volver a cargar la página para que aparezca realmente.
limón

3
Me da un puntero nulo. :( En esta línea:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

drawingCache está en desuso en Kotlin
Raju yourPepe

3

Escribe debajo del código

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

obtengo AppCompatImageView no se puede enviar a android.graphics.drawable.BitmapDrawable
Billyjoker

1

Para aquellos que están buscando Kotlinuna solución para llegar Bitmapa ImageView.

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

obtengo AppCompatImageView no se puede enviar a android.graphics.drawable.BitmapDrawable
Billyjoker

0

Este código es mejor

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

¿Es imageView.getDrawable (); -> significa obtener la imagen de la carpeta dibujable? CMIIW .... @Ahmad
gumuruh

No. Puedes usar este código. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh

-3

Otra forma de obtener un mapa de bits de una imagen es hacer esto:

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

-10

prueba este código:

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

66
¿Podría describir la mejora sobre la respuesta aceptada de @Arslan?
bummi

será mejor que expliques por qué tu respuesta resuelve su problema
Muhammed Refaat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.