Завантажте Bitmap до ImageView


314

Дано

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

Чи можливо отримати растрову карту?


1
так, можливо, коли ви натискаєте на зображення, ми отримаємо це, якщо ви хочете цю вимогу, дайте мені знати.
RajaReddy PolamReddy

Відповіді:


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

34
Будьте уважні, щоб перевірити, чи image.getDrawable()можна насправді подати BitmapDrawable(щоб уникнути IllegalCastExceptions). Якщо, наприклад, ви використовуєте шари для свого зображення, то цей фрагмент буде дещо іншим:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Олексій Семенюк

2
Це час від часу поверне растрове зображення з деякими або всіма чорними пікселями.

2
це не поверне оригінальну растрову карту, ні відфільтровану растрову карту, якщо ви застосували для перегляду зображень / зображень.
DearDhruv

4
чи працює це, якщо зображення ImageViewвстановлено з URI? imageView.setImageUri()
Хендра Ангдріан

1
@praneethkumar це працює в моєму сценарії. Великі пальці за цю дивовижну відповідь!
Хендра Ангдріан

46

Це отримає вас Bitmapвід ImageView. Хоча це не той самий растровий об’єкт, який ви встановили. Це новий.

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

коли це "не працює", що відбувається? Чи повертається це нульовим чи викинутим виключенням чи що?
Сарвар Ерфан

2
він повертається нульовим. іноді мені доводиться перезавантажувати сторінку, щоб вона фактично з’явилася.
лимон

3
Дає мені нульовий покажчик. :( На цьому рядку:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

У Котліні вичерпано малюнокCache
Раджу вашПепе

3

Напишіть код нижче

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

я отримую AppCompatImageView не можна передавати на android.graphics.dravable.BitmapDravable
Billyjoker

1

Для тих, хто шукає Kotlinрішення, Bitmapзвідки вийти ImageView.

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

я отримую AppCompatImageView не можна передавати на android.graphics.dravable.BitmapDravable
Billyjoker

0

Цей код краще.

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.getDravable (); -> означає отримати зображення з папки, що витягується? CMIIW .... @Ahmad
gumuruh

Ні. Ви можете використовувати цей код. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ахмад Агазаде

-3

Інший спосіб отримати растрове зображення:

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

-10

спробуйте цей код:

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

6
Чи можете ви описати вдосконалення щодо прийнятої відповіді @Arslan?
буммі

ви краще поясніть, чому ваша відповідь вирішує його проблему
Мухаммед Рефаат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.