Conecte o Bitmap ao ImageView

314

Dado

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

É possível recuperar o bitmap?

limão
fonte
1
sim, é possível quando você clica na imagem, teremos que, se você quiser esse requisito, me avise.
RajaReddy PolamReddy

Respostas:

809
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Arslan Anwar
fonte
34
Tenha cuidado para verificar se você image.getDrawable()realmente pode ser escolhido BitmapDrawable(para evitar IllegalCastExceptions). Se, por exemplo, você usar camadas em sua imagem, em seguida, esse trecho será um pouco diferente:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk
2
Ocasionalmente, isso retornará um bitmap com alguns ou todos os pixels pretos.
2
isso não retornará o bitmap original nem o bitmap filtrado se você tiver aplicado na drawable / imageview.
DearDhruv
4
isso funciona se a imagem ImageViewé definida a partir de URI? imageView.setImageUri()
Hendra Anggrian
1
@praneethkumar funciona no meu cenário. Polegares para cima para esta resposta incrível!
Hendra Anggrian 04/07/19
46

Isso fará com que você a Bitmappartir do ImageView. No entanto, não é o mesmo objeto de bitmap que você definiu. É um novo.

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
fonte
quando "não funciona", o que acontece? Ele retorna nulo ou lança exceção ou o quê?
Sarwar Erfan
2
retorna nulo. às vezes, preciso recarregar a página para que ela apareça.
limão
3
Dá-me um ponteiro nulo. :( Nesta linha:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot 02/04
drawingCache está obsoleta em Kotlin
Raju yourPepe
3

Escreva o código abaixo

ImageView yourImageView = (ImageView) findViewById(R.id.yourImageView);
Bitmap bitmap = ((BitmapDrawable)yourImageView.getDrawable()).getBitmap();
Pankaj Talaviya
fonte
Eu obtenho AppCompatImageView não pode ser transmitido para android.graphics.drawable.BitmapDrawable
Billyjoker
1

Para aqueles que estão à procura de Kotlinsolução para obter Bitmapa partir ImageView.

var bitmap = (image.drawable as BitmapDrawable).bitmap
Asad Ali Choudhry
fonte
O AppCompatImageView não pode ser transmitido para android.graphics.drawable.BitmapDrawable
Billyjoker
0

Esse código é melhor.

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
fonte
é imageView.getDrawable (); -> significa obter a imagem da pasta drawable? CMIIW .... @Ahmad
gumuruh
Não. Você pode usar este código. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh
-3

Outra maneira de obter um bitmap de uma imagem é fazer o seguinte:

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

tente este código:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Droid_Mechanic
fonte
6
Você poderia descrever o aprimoramento da resposta aceita por @Arslan?
Bummi
é melhor você explicar por que sua resposta resolve o problema dele
Muhammed Refaat 19/11/2015