Pobierz mapę bitową do ImageView

314

Dany

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

Czy można odzyskać mapę bitową?

cytrynowy
źródło
1
tak, możliwe, gdy klikniesz obraz, otrzymamy to, jeśli chcesz ten wymóg, daj mi znać.
RajaReddy PolamReddy

Odpowiedzi:

809
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Arslan Anwar
źródło
34
Uważaj, aby sprawdzić, czy image.getDrawable()rzeczywiście można rzucić na BitmapDrawable(aby uniknąć IllegalCastExceptions). Jeśli na przykład użyjesz warstw na obrazie, ten fragment kodu będzie nieco inny:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk
2
Sporadycznie zwraca bitmapę z niektórymi lub wszystkimi czarnymi pikselami.
2
nie zwróci oryginalnej mapy bitowej ani filtrowanej mapy bitowej, jeśli zastosowałeś do drawable / imageview.
DearDhruv,
4
działa to, jeśli ImageViewustawiony jest obraz w URI? imageView.setImageUri()
Hendra Anggrian
1
@praneethkumar to działa w moim scenariuszu. Kciuki za tę niesamowitą odpowiedź!
Hendra Anggrian
46

Otrzymasz to Bitmapod ImageView. Chociaż nie jest to ten sam obiekt bitmapowy, który ustawiłeś. To jest nowy.

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

=== EDYCJA ===

 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
źródło
kiedy to „nie działa”, co się dzieje? Czy zwraca wartość zerową lub zgłasza wyjątek?
Sarwar Erfan
2
zwraca zero. czasami muszę ponownie załadować stronę, aby się pojawiła.
cytryna
3
Daje mi zerowy wskaźnik. :( W tej linii:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot
DrawingCache jest przestarzałe w Kotlin
Raju yourPepe
3

Napisz poniższy kod

ImageView yourImageView = (ImageView) findViewById(R.id.yourImageView);
Bitmap bitmap = ((BitmapDrawable)yourImageView.getDrawable()).getBitmap();
Pankaj Talaviya
źródło
dostaję AppCompatImageView nie można przesłać do android.graphics.drawable.BitmapDrawable
Billyjoker
1

Dla tych, którzy szukają Kotlinrozwiązania, aby uzyskać Bitmapod ImageView.

var bitmap = (image.drawable as BitmapDrawable).bitmap
Asad Ali Choudhry
źródło
dostaję AppCompatImageView nie można przesłać do android.graphics.drawable.BitmapDrawable
Billyjoker
0

Ten kod jest lepszy.

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
źródło
czy to imageView.getDrawable (); -> oznacza pobranie obrazu z folderu do rysowania? CMIIW .... @Ahmad
gumuruh
Nie. Możesz użyć tego kodu. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh
-3

Innym sposobem uzyskania mapy bitowej obrazu jest wykonanie tego:

Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
imageView.setImageBitmap(imagenAndroid);
Hermes Trismegisto
źródło
-10

spróbuj tego kodu:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Droid_Mechanic
źródło
6
Czy możesz opisać ulepszenie w stosunku do zaakceptowanej odpowiedzi @Arslan?
bummi
lepiej wyjaśnij, dlaczego twoja odpowiedź rozwiązuje jego problem
Muhammed Refaat