BitmapFactory.decodeResource () возвращает null для формы, определенной в xml drawable

Я просмотрел несколько похожих вопросов, хотя я не нашел правильного ответа по моему запросу.

У меня есть drawable, определенный в shape.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@color/bg_color" /> </shape> 

Я хочу преобразовать его в объект Bitmap, чтобы выполнить некоторые операции, но BitmapFactory.decodeResource() возвращает значение null.

Вот как я это делаю:

 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.shape); 

Что я делаю не так? Является ли BitmapFactory.decodeResource() применимым для определяемых xml чертежей?

Solutions Collecting From Web of "BitmapFactory.decodeResource () возвращает null для формы, определенной в xml drawable"

Поскольку вы хотите загрузить Drawable , а не Bitmap , используйте это:

 Drawable d = getResources().getDrawable(...); 

Чтобы превратить его в Bitmap :

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

Взято из: Как преобразовать Drawable в Bitmap?

Это рисованное, а не растровое изображение. getDrawable этого вы должны использовать getDrawable

 public static Bitmap convertDrawableResToBitmap(@DrawableRes int drawableId, Integer width, Integer height) { Drawable d = getResources().getDrawable(drawableId); if (d instanceof BitmapDrawable) { return ((BitmapDrawable) d).getBitmap(); } if (d instanceof GradientDrawable) { GradientDrawable g = (GradientDrawable) d; int w = d.getIntrinsicWidth() > 0 ? d.getIntrinsicWidth() : width; int h = d.getIntrinsicHeight() > 0 ? d.getIntrinsicHeight() : height; Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); g.setBounds(0, 0, w, h); g.setStroke(1, Color.BLACK); g.setFilterBitmap(true); g.draw(canvas); return bitmap; } Bitmap bit = BitmapFactory.decodeResource(getResources(), drawableId); return bit.copy(Bitmap.Config.ARGB_8888, true); } //------------------------ Bitmap b = convertDrawableResToBitmap(R.drawable.myDraw , 50, 50);