Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


BitmapFactory.decodeResource () devuelve null para la forma definida en xml drawable

Miré a través de varias preguntas similares, aunque no he encontrado la respuesta adecuada en mi consulta.

Tengo un dibujable, definido en 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> 

Quiero convertirlo en objeto Bitmap para realizar algunas operaciones, pero BitmapFactory.decodeResource() devuelve null.

Así es como lo hago:

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

¿Qué estoy haciendo mal? ¿Es BitmapFactory.decodeResource() aplicable para xml definido drawables?

  • ¿Fondo vertical-rayado en XML?
  • Cambiar el color del borde de la forma en tiempo de ejecución
  • Brillante degradado con dibujable androide xml
  • Barra de progreso circular Android con esquinas redondeadas
  • Uso de recursos extraíbles
  • Esquinas redondeadas con color de borde
  • ¿Cómo usar una forma dibujable junto con una imagen?
  • XML dibujable teniendo un comportamiento diferente en 4.3 y 4.1.2
  • 3 Solutions collect form web for “BitmapFactory.decodeResource () devuelve null para la forma definida en xml drawable”

    Dado que desea cargar un Drawable , no un Bitmap , utilice este:

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

    Para convertirlo en un 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; } 

    Tomado de: ¿Cómo convertir un dibujable a un mapa de bits?

    Es un dibujable, no un mapa de bits. Debería utilizar getDrawable en getDrawable lugar

     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); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.