Получить растровое изображение, прикрепленное к 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
это не вернет ни исходное растровое изображение, ни отфильтрованное растровое изображение, если вы применили его к drawable / imageview.
DearDhruv

4
это работает, если изображение в ImageViewот URI? imageView.setImageUri()
Хендра Анггриан

1
@praneethkumar это работает в моем сценарии. Недурно за этот потрясающий ответ!
Хендра Анггриан

46

Это позволит получить вам Bitmapот ImageView. Хотя это не тот объект растрового изображения, который вы установили. Это новый.

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

=== РЕДАКТИРОВАТЬ ===

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

когда это "не работает", что происходит? Возвращает ли null или выдает исключение или как?
Сарвар Эрфан

2
он возвращает ноль. иногда мне нужно перезагрузить страницу, чтобы она действительно появилась.
лимон

3
Дает мне нулевой указатель. :( На этой линии:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

DrawingCache устарела в Котлине
Раджу Пепе

3

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

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

я получаю AppCompatImageView не может быть приведен к android.graphics.drawable.BitmapDrawable
Billyjoker

1

Для тех, кто ищет Kotlinрешение, чтобы получить Bitmapот ImageView.

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

я получаю AppCompatImageView не может быть приведен к android.graphics.drawable.BitmapDrawable
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.getDrawable (); -> означает получение изображения из папки для рисования? 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.