クエリで適切な回答が見つかりませんでしたが、複数の同様の質問を調べました。
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>
_
いくつかの操作を実行するためにビットマップオブジェクトに変換したいのですが、BitmapFactory.decodeResource()
はnullを返します。
これは私がそれをやっている方法です:
_Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.shape);
_
私は何を間違えていますか? BitmapFactory.decodeResource()
はXML定義のドロウアブルに適用可能ですか?
Drawable
ではなくBitmap
をロードするため、これを使用します。
Drawable d = getResources().getDrawable(R.drawable.your_drawable, your_app_theme);
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に変換する方法?
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);
.xml
ディレクトリへ:.../drawable-24
、および.../drawable
代わりに。
それは私のために働く、これが誰かを助けることを願っています。
ビットマップではなく、ドローアブルです。代わりにgetDrawable
を使用する必要があります