Conecte o Bitmap ao ImageView


314

Dado

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

É possível recuperar o bitmap?


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

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

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

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

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

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

-10

tente este código:

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.