Как преобразовать Drawable в Bitmap?

Я хотел бы установить определенный Drawable в качестве обоев устройства, но все функции обоев принимают только Bitmaps. Я не могу использовать WallpaperManager, потому что у меня версия до 2.1.

Кроме того, мои чертежи загружаются из Интернета и не находятся в R.drawable.


person Rob    schedule 14.06.2010    source источник
comment
codingaffairs.blogspot.com/2016/ 06 /   -  person Developine    schedule 17.06.2016
comment
выберите правильный ответ: stackoverflow.com/a/3035869/4548520   -  person user25    schedule 10.09.2016
comment
stackoverflow.com/a/15555203/1731082   -  person Erfan Bagheri    schedule 14.12.2016


Ответы (20)


Этот фрагмент кода помогает.

Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.icon_resource);

Вот версия, в которую загружается изображение.

String name = c.getString(str_url);
URL url_value = new URL(name);
ImageView profile = (ImageView)v.findViewById(R.id.vdo_icon);
if (profile != null) {
    Bitmap mIcon1 =
        BitmapFactory.decodeStream(url_value.openConnection().getInputStream());
    profile.setImageBitmap(mIcon1);
}
person Praveen    schedule 14.06.2010
comment
Я думаю, у вас есть значения URL. тогда мой отредактированный ответ должен помочь. - person Praveen; 14.06.2010
comment
откуда берется str_url? Я не смог найти ни одной функции Drawable, связанной со строками ... спасибо за вашу помощь. - person Rob; 14.06.2010
comment
Думаю, я кое-что нашел: если рисование - это рисование, которое я хочу преобразовать в растровое изображение, то: Bitmap bitmap = ((BitmapDrawable) draw) .getBitmap (); делает свое дело! - person Rob; 14.06.2010
comment
Это тот ответ, который я искал. Простое и надежное решение. - person tomrozb; 02.03.2013
comment
@Rob: если ваш Drawable является BitmapDrawable только. (что означает, что ваш Drawable на самом деле всего лишь оболочка вокруг растрового изображения) - person njzk2; 28.05.2013
comment
Кажется, что это масштабирует изображение от собственного разрешения до любого разрешения, установленного на устройстве. - person CJBS; 22.03.2016
comment
примечание: это вызывает массивную ошибку java.lang.OutOfMemoryError с JPG - person Someone Somewhere; 21.06.2018
comment
примечание: список перестает плавно прокручиваться при использовании этого - person Pranav Mahajan; 16.10.2018
comment
Это декодирует ресурс как растровое изображение, он не преобразует Drawable в растровое изображение, а создает растровое изображение из источника. - person Lassi Kinnunen; 26.12.2019
comment
все, что больше маленького изображения, вызовет проблемы - person Someone Somewhere; 01.07.2020
comment
Это не работает с svgs. BitmapFactory.decodeResource() return null - person John Glen; 02.10.2020

Это преобразует BitmapDrawable в Bitmap.

Drawable d = ImagesArrayList.get(0);  
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
person Rob    schedule 14.06.2010
comment
это действительно лучший способ? Конечно, рисованный объект может быть другого типа, и это вызовет исключение runtimeException? Например, это может быть ninePatchDrawble ...? - person Dori; 09.06.2011
comment
@Dori, вы можете заключить код в условный оператор, чтобы проверить, действительно ли это BitmapDrawable, перед его преобразованием: if (d instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); } - person Tony Chan; 09.07.2011
comment
Не можете поверить в 64 голоса за? Этот код, очевидно, работает только в том случае, если d уже BitmapDrawable, и в этом случае получить его как растровое изображение тривиально ... Во всех остальных случаях произойдет сбой с ClassCastException. - person Matthias; 03.11.2011
comment
@Matthias, не говоря уже об этом .. сам вопрос, тот же автор, набрал 100 голосов: / - person quinestor; 18.12.2012
comment
Это настолько специализировано для тривиального случая. - person njzk2; 28.05.2013
comment
Для тех, кто жалуется, что это неправильно, вы, ребята, проверяли страницу SO about? В нем говорится, что принятые ответы не обязательно означают, что ответ правильный, это означает, что ответ сработал для OP. - person lemuel; 07.04.2014
comment
Слишком специализированный. Это не отвечает на вопрос OP Как преобразовать Drawable в Bitmap? он отвечает. Как я могу преобразовать BitmapDrawable в растровое изображение? Большая разница. - person Atorian; 16.05.2014
comment
@lemuel Это НЕ означает, что мы должны воздерживаться от указания того факта, что ответ НЕПРАВИЛЬНЫЙ. - person RestInPeace; 26.05.2014
comment
Извините, если мой комментарий вас обидел @RestInPeace - person lemuel; 29.05.2014
comment
@lemuel Ты меня совсем не обидел! Возможно, такое впечатление произвело мое использование прописных слов, но это было просто подчеркнуто. - person RestInPeace; 29.05.2014
comment
Сюрприз: когда за комментарий набирает больше голосов, чем за сам ответ. - person Faizan Mubasher; 22.09.2014
comment
Растровое изображение точечного рисунка = ((BitmapDrawable) (getResources (). GetDrawable (R.drawable.avatar))). GetBitmap (); - person Dadan; 21.03.2016
comment
После появления Adaptive значков в Android Oreo это начало вызывать множество сбоев в приложениях, отображающих значки других приложений. - person tasomaniac; 30.12.2017
comment
это дает ClassCastException - person Silambarasan; 25.11.2019
comment
Это полная ошибка. Как вы подтверждаете, что экземпляр Drawable является экземпляром BitmapDrawable? Более того, кто вам сказал, что вы можете принудительно привести экземпляр класса к ссылке на его подкласс? В некоторых случаях, особенно без try / catch, у вас будут исключения. - person Licat Julius; 19.12.2020

Drawable может быть нарисован на Canvas, а Canvas может быть подкреплен Bitmap:

(Обновлено, чтобы обрабатывать быстрое преобразование для BitmapDrawables и гарантировать, что созданный Bitmap имеет допустимый размер)

public static Bitmap drawableToBitmap (Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    int width = drawable.getIntrinsicWidth();
    width = width > 0 ? width : 1;
    int height = drawable.getIntrinsicHeight();
    height = height > 0 ? height : 1;

    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}
person kabuko    schedule 22.02.2012
comment
Что произойдет, если параметр drawable равен нулю? - person hrules6872; 04.02.2016
comment
Этот метод не поддерживает VectorDrawable - person Mahmoud; 08.05.2016
comment
codingaffairs.blogspot.com/2016/ 06 / - person Developine; 17.06.2016
comment
Предполагая, что вы получаете непустой Drawable, почему нужно проверять, что ширина и высота не равны 0? Кроме того, зачем вам использовать setBounds (), если они одного размера? - person Yoav Feuerstein; 30.01.2017
comment
Хорошее решение! Android 8.0 / sdk 26 ApplicationInfo.loadIcon (PackageManager pm) возвращает AdaptiveIconDrawable。 Использование вашего кода может помочь мне преобразовать AdaptiveIconDrawable в растровое изображение。 - person burulangtu; 11.10.2017

МЕТОД 1. Либо вы можете напрямую преобразовать в растровое изображение, как это

Bitmap myLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_drawable);

МЕТОД 2: вы даже можете преобразовать ресурс в пригодный для рисования, и из этого вы можете получить растровое изображение, подобное этому

Bitmap myLogo = ((BitmapDrawable)getResources().getDrawable(R.drawable.logo)).getBitmap();

Для API> 22 метод getDrawable перемещен в класс ResourcesCompat, поэтому вы делаете что-то вроде этого

Bitmap myLogo = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), R.drawable.logo, null)).getBitmap();
person Keyur    schedule 02.02.2018
comment
ResourcesCompat работает только в том случае, если drawable является BitmapDrawable, если вы используете VectorDrawable, тогда у вас будет CCE. - person Brill Pappin; 27.04.2018
comment
Ни один из них не работает с ресурсом VectorDrawable. Возникает следующая ошибка - android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable - person Adam Hurwitz; 09.06.2019
comment
Это решение хорошо работает с Kotlin. - person Adam Hurwitz; 09.06.2019

1) Возможность переноса в растровое изображение:

Bitmap mIcon = BitmapFactory.decodeResource(context.getResources(),R.drawable.icon);
// mImageView.setImageBitmap(mIcon);

2) Растровое изображение для рисования:

Drawable mDrawable = new BitmapDrawable(getResources(), bitmap);
// mImageView.setDrawable(mDrawable);
person Sanjayrajsinh    schedule 07.11.2019

android-ktx имеет Drawable.toBitmap метод: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.html

Из Котлина

val bitmap = myDrawable.toBitmap()
person MyDogTom    schedule 05.06.2019
comment
Это самое простое решение для VectorDrawable в Котлине! Также более подробно поделился в этом сообщении SO здесь. - person Adam Hurwitz; 09.06.2019

очень простой

Bitmap tempBMP = BitmapFactory.decodeResource(getResources(),R.drawable.image);
person Erfan Bagheri    schedule 21.03.2013
comment
Это просто плагиат другого ответа на этот вопрос тремя полными годами ранее. - person Nick Cardoso; 15.03.2017

Итак, после просмотра (и использования) других ответов кажется, что все они плохо справляются с ColorDrawable и PaintDrawable. (Особенно на леденце) казалось, что Shaders были изменены, поэтому сплошные блоки цветов обрабатывались некорректно.

Сейчас я использую следующий код:

public static Bitmap drawableToBitmap(Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable) drawable).getBitmap();
    }

    // We ask for the bounds if they have been set as they would be most
    // correct, then we check we are  > 0
    final int width = !drawable.getBounds().isEmpty() ?
            drawable.getBounds().width() : drawable.getIntrinsicWidth();

    final int height = !drawable.getBounds().isEmpty() ?
            drawable.getBounds().height() : drawable.getIntrinsicHeight();

    // Now we check we are > 0
    final Bitmap bitmap = Bitmap.createBitmap(width <= 0 ? 1 : width, height <= 0 ? 1 : height,
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

В отличие от других, если вы вызовете setBounds на Drawable перед тем, как попросить превратить его в растровое изображение, он нарисует растровое изображение правильного размера!

person Chris.Jenkins    schedule 18.12.2014
comment
Не будет ли setBounds разрушить предыдущие границы drawable? Не лучше ли сохранить его и потом восстановить? - person android developer; 11.04.2015
comment
@androiddeveloper, если границы были установлены, мы все равно их используем. В некоторых случаях это необходимо, если границы не установлены и не имеют внутреннего размера (например, в некоторых случаях ColorDrawables). Таким образом, ширина и высота будут равны 0, мы даем возможность рисования 1x1 таким образом, чтобы он действительно что-то рисовал. Я мог бы возразить, что в этих случаях мы могли бы выполнить проверку типа для ColorDrawable, но это работает в 99% случаев. (Вы можете изменить его под свои нужды). - person Chris.Jenkins; 11.04.2015
comment
@ Chris.Jenkins Что, если у него нет границ, и теперь у него появятся новые? Я также хотел бы задать другой вопрос: как лучше всего установить размер возвращаемого растрового изображения (даже для BitmapDrawable)? - person android developer; 11.04.2015
comment
Предлагаю внимательно прочитать код. Если Drawable не имеет установленных границ, он использует IntrinsicWidth/Height. Если они оба ‹= 0, мы устанавливаем холст в 1 пиксель. Вы правы, если Drawable не имеет границ, некоторые из них будут переданы (в большинстве случаев 1x1), но это ТРЕБУЕТСЯ для таких вещей, как ColorDrawable, которые НЕ имеют внутренних размеров. Если бы мы этого не делали, будет выдано Exception, вы не сможете нарисовать 0x0 на холсте. - person Chris.Jenkins; 11.04.2015
comment
@ Chris.Jenkins Я имею в виду, что перед вызовом этой функции, если у drawable нет границ, после его вызова у него будет. Также ответьте на другой вопрос. - person android developer; 11.04.2015
comment
Ах, я понимаю, что вы имеете в виду. Да, вы правы, исходный Drawable теперь будет иметь границы. Думаю, тебе нужно позвонить mutate(), чтобы быть в безопасности. Это используется там, где вы хотите растровое изображение и выбросите его, поэтому это никогда не было проблемой. Что касается размера растрового изображения? установка Bounds определяет, сколько на самом деле отрисовывается (пока Drawable хорошо играет). Но Drawable может рисовать за пределами холста (вы просто этого не увидите). Единственный верный способ определить размер растрового изображения - передать его в качестве параметра. - person Chris.Jenkins; 11.04.2015
comment
Позвольте нам продолжить это обсуждение в чате. - person Chris.Jenkins; 11.04.2015
comment
@ Chris.Jenkins Что здесь делает mutate ()? не было бы проще сохранить предыдущие границы и установить их снова в конце? Не могли бы вы обновить код, чтобы он был более правильным? Кроме того, что касается размера растрового изображения, то, что вы написали, относится к случаю, не относящемуся к BitmapDrawable. Для BitmapDrawable, я думаю, вы просто используете createScaledBitmap (или что-то подобное, зависит от того, как вы хотите масштабировать)? - person android developer; 11.04.2015
comment
mutate() будет делать копию, оставляя только исходную возможность рисования, что устраняет проблему возврата в исходные границы. Я редко меняю код, основываясь на этих моментах. Если ваш вариант использования требует этого, добавьте еще один ответ. Предлагаю вам создать еще один вопрос по масштабированию Bitmap. - person Chris.Jenkins; 11.04.2015
comment
@ Chris.Jenkins: Следует отметить, что mutate () не копирует. Вместо этого он помечает его как изменяемый, чтобы он не влиял на другие чертежи, использующие тот же ConstantState. Кроме того, границы не содержатся в ConstantState, поэтому функция mutate в этом случае работать не будет. - person David Liu; 22.09.2015
comment
Как лучше всего это изменить, чтобы я мог сказать, какой размер использовать в качестве выходного растрового изображения? - person android developer; 26.12.2017

Может, это кому-то поможет ...

Из PictureDrawable в Bitmap используйте:

private Bitmap pictureDrawableToBitmap(PictureDrawable pictureDrawable){ 
    Bitmap bmp = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(bmp); 
    canvas.drawPicture(pictureDrawable.getPicture()); 
    return bmp; 
}

... реализовано как таковое:

Bitmap bmp = pictureDrawableToBitmap((PictureDrawable) drawable);
person Mauro    schedule 08.02.2012
comment
Как и в случае с ответом Роба, вам требуется конкретный тип Drawable, в данном случае PictureDrawable. - person kabuko; 22.02.2012
comment
Может, это кому-то поможет ... - person Mauro; 23.02.2012

Последняя базовая библиотека androidx (androidx.core: core-ktx: 1.2.0) теперь имеет функция расширения: Drawable.toBitmap(...) для преобразования Drawable в Bitmap.

person Balazs Banyai    schedule 12.03.2020
comment
Я не могу понять, как импортировать эту функцию. Я предполагаю, что это работает и за пределами Котлина? - person Saman Miran; 09.10.2020
comment
Из java вам необходимо импортировать файл Kt, содержащий методы расширения. Кроме того, подпись немного сложнее, поскольку параметры получателя и параметры по умолчанию недоступны в java. Будет так: DrawableKt.toBitmap(...); - person Balazs Banyai; 11.10.2020
comment
Ах! Спасибо :) - person Saman Miran; 11.10.2020

Вот разрешение получше

public static Bitmap drawableToBitmap (Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

public static InputStream bitmapToInputStream(Bitmap bitmap) {
    int size = bitmap.getHeight() * bitmap.getRowBytes();
    ByteBuffer buffer = ByteBuffer.allocate(size);
    bitmap.copyPixelsToBuffer(buffer);
    return new ByteArrayInputStream(buffer.array());
}

Код из Как читать извлекаемые биты как InputStream

person Dawid Drozd    schedule 22.10.2013

Вот хорошая версия ответа Kotlin, предоставленная @ Chris.Jenkins здесь: https://stackoverflow.com/a/27543712/1016462

fun Drawable.toBitmap(): Bitmap {
  if (this is BitmapDrawable) {
    return bitmap
  }

  val width = if (bounds.isEmpty) intrinsicWidth else bounds.width()
  val height = if (bounds.isEmpty) intrinsicHeight else bounds.height()

  return Bitmap.createBitmap(width.nonZero(), height.nonZero(), Bitmap.Config.ARGB_8888).also {
    val canvas = Canvas(it)
    setBounds(0, 0, canvas.width, canvas.height)
    draw(canvas)
  }
}

private fun Int.nonZero() = if (this <= 0) 1 else this
person tasomaniac    schedule 29.12.2017

Android предлагает нестандартное решение: BitmapDrawable. Чтобы получить Bitmap, нам нужно предоставить идентификатор ресурса R.drawable.flower_pic в BitmapDrawable, а затем преобразовать его в Bitmap.

Bitmap bm = ((BitmapDrawable) getResources().getDrawable(R.drawable.flower_pic)).getBitmap();
person kc ochibili    schedule 29.05.2014

Используйте этот код. Он поможет вам в достижении вашей цели.

 Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.profileimage);
    if (bmp!=null) {
        Bitmap bitmap_round=getRoundedShape(bmp);
        if (bitmap_round!=null) {
            profileimage.setImageBitmap(bitmap_round);
        }
    }

  public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
    int targetWidth = 100;
    int targetHeight = 100;
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
            targetHeight,Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
    path.addCircle(((float) targetWidth - 1) / 2,
            ((float) targetHeight - 1) / 2,
            (Math.min(((float) targetWidth), 
                    ((float) targetHeight)) / 2),
                    Path.Direction.CCW);

    canvas.clipPath(path);
    Bitmap sourceBitmap = scaleBitmapImage;
    canvas.drawBitmap(sourceBitmap, 
            new Rect(0, 0, sourceBitmap.getWidth(),
                    sourceBitmap.getHeight()), 
                    new Rect(0, 0, targetWidth, targetHeight), new Paint(Paint.FILTER_BITMAP_FLAG));
    return targetBitmap;
}
person anupam sharma    schedule 30.05.2014

BitmapFactory.decodeResource() автоматически масштабирует растровое изображение, поэтому ваше растровое изображение может получиться нечетким. Чтобы предотвратить масштабирование, сделайте следующее:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(context.getResources(),
                                             R.drawable.resource_name, options);

or

InputStream is = context.getResources().openRawResource(R.drawable.resource_name)
bitmap = BitmapFactory.decodeStream(is);
person John Doe    schedule 09.07.2019

Растровое изображение растрового изображения = BitmapFactory.decodeResource (context.getResources (), R.drawable.icon);

Это не будет работать каждый раз, например, если ваш drawable является списком слоев drawable, тогда он дает нулевой ответ, поэтому в качестве альтернативы вам нужно нарисовать свой drawable на холсте, а затем сохранить как растровое изображение, см. Ниже чашку кода.

public void drawableToBitMap(Context context, int drawable, int widthPixels, int heightPixels) {
    try {
        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/", "drawable.png");
        FileOutputStream fOut = new FileOutputStream(file);
        Drawable drw = ResourcesCompat.getDrawable(context.getResources(), drawable, null);
        if (drw != null) {
            convertToBitmap(drw, widthPixels, heightPixels).compress(Bitmap.CompressFormat.PNG, 100, fOut);
        }
        fOut.flush();
        fOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
    Bitmap bitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, widthPixels, heightPixels);
    drawable.draw(canvas);
    return bitmap;
}

приведенный выше код, сохраните, что вы можете рисовать как drawable.png в каталоге загрузки

person Kishan Donga    schedule 21.06.2020

Библиотека ImageWorker может преобразовывать растровые изображения в форматы для рисования или base64 и наоборот.

val bitmap: Bitmap? = ImageWorker.convert().drawableToBitmap(sourceDrawable)

Реализация

На уровне проекта Gradle

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

На уровне приложения Gradle

dependencies {
            implementation 'com.github.1AboveAll:ImageWorker:0.51'
    }

Вы также можете сохранять и извлекать растровые изображения / чертежи / изображения base64 из внешних файлов.

Проверить здесь. https://github.com/1AboveAll/ImageWorker/edit/master/README.md

person Himanshu Rawat    schedule 09.12.2018

если вы используете kotlin, используйте приведенный ниже код. это будет работать

// для использования пути к изображению

val image = Drawable.createFromPath(path)
val bitmap = (image as BitmapDrawable).bitmap
person Sachidananda Sahu    schedule 19.07.2019

person    schedule
comment
Это похоже на единственный ответ, который будет работать для любого типа рисования, а также имеет быстрое решение для рисованного объекта, который уже является BitmapDrawable. +1 - person Matt Wolfe; 07.06.2012
comment
Добавьте к этому решение @Mauro после проверки BitmapDrawable, и вы получите идеальное решение с любыми / всеми более быстрыми решениями Incorporated. - person Tom; 05.07.2012
comment
только одна поправка: docs говорит о BitmapDrawable.getBitmap (), что он может вернуть значение null. Я говорю, что он может вернуться уже переработанным. - person kellogs; 02.09.2012
comment
Будьте осторожны: getIntrinsicWidth() и getIntrinsicHieght() вернут -1, если drawable - сплошной цвет. - person S.D.; 12.10.2012
comment
Итак ... еще одна проверка ColorDrawable, и у нас есть победитель. Серьезно, кто-то делает это принятым ответом. - person kaay; 14.01.2013
comment
Вопреки отмеченному ответу, это дает ответ на вопрос. - person njzk2; 28.05.2013
comment
@kaay Вы не можете еще раз проверить это, так как вам все равно понадобится ширина / высота для создания холста для рисования ColorDrawable, поэтому вам просто нужно, чтобы этот метод также принимал ширину и высоту в качестве параметра - person nbarraille; 28.07.2014
comment
@nbarraille В этом случае вы можете просто создать растровое изображение размером 1x1 пиксель, и все готово. Никаких дополнительных параметров не требуется. - person matiash; 23.01.2015
comment
Это не работает для всех типов, доступных для рисования. Например, GradientDrawable, который я пробовал: java.lang.ClassCastException: android.graphics.drawable.GradientDrawable нельзя преобразовать в android.graphics.drawable.BitmapDrawable - person Anonymous; 21.03.2015
comment
Андре, ты крутой чувак! это поможет мне с RecyclerView, который использует тот же ImageView с оттенком DrawableCompat. - person Vinicius DSL; 10.07.2015
comment
Спасибо. Экономит время. Также поддерживает векторные чертежи. - person X09; 03.06.2017
comment
Как лучше всего это изменить, чтобы я мог сказать, какой размер использовать в качестве выходного растрового изображения? - person android developer; 26.12.2017
comment
@Anonymous, Вы нашли какое-нибудь решение для такого исключения java.lang.ClassCastException? Я столкнулся с этой проблемой. - person Priyanka Alachiya; 23.03.2019

person    schedule
comment
Я думаю, вы неправильно прочитали вопрос. Возникает вопрос: как получить растровое изображение из доступного ресурса, а не из системной галереи - person kc ochibili; 29.05.2014