Получить растровое изображение, прикрепленное к 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();
Droid_Mechanic
источник
6
Не могли бы вы описать улучшение по сравнению с принятым ответом @Arslan?
Бумми
Вы бы лучше объяснили, почему ваш ответ решает его проблему
Мухаммед Рефаат