BitmapFactory.decodeResource () renvoie null pour la forme définie dans xml drawable
j'ai regardé à travers plusieurs questions similaires, bien que je n'ai pas trouvé la réponse appropriée sur ma question.
j'ai un tirable, défini dans la forme.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>
je veux le convertir en objet Bitmap pour effectuer quelques opérations, mais BitmapFactory.decodeResource()
renvoie null.
c'est de Cette façon que je suis en train de faire:
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.shape);
Qu'est-ce que je fais de mal? Est BitmapFactory.decodeResource()
applicable pour xml défini un drawable?
25
demandé sur
Sufian
2014-06-24 18:19:30
3 réponses
Puisque vous voulez charger un Drawable
, pas un Bitmap
, utilisez ceci:
Drawable d = getResources().getDrawable(...);
pour en faire 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;
}
extrait de: Comment convertir un Drawable à un Bitmap?
38
répondu
Philipp Jahoda
2017-05-23 12:10:47
c'est un drawable, pas une image bitmap. Vous devez utiliser getDrawable
à la place de
1
répondu
Blackbelt
2014-06-24 14:21:44
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);
1
répondu
Ali Bagheri
2017-05-04 17:56:50