从Drawable资源ID解码位图返回null

6
我想从可绘制资源ID中获取位图,我找到了使用BitmapFactory decode方法解码的解决方案,但它返回null。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_tick);

1
“ic_tick”是什么类型的文件? - Mike M.
我是使用Android Studio中的“文件”->“新建”->“矢量资产”创建的。 - Marium Jawed
因此,它不是像 .png.jpg 等位图文件 - 您只能使用 BitmapFactory 处理这些位图文件。 - pskink
这个问题已经解决了,我正在使用矢量图。 - Marium Jawed
1个回答

4

请核实您是否正在使用矢量图形(Vector drawable)或普通的png/jpeg图像作为可绘制(drawable),如果尝试解码矢量图形,则会返回空值。

如果您要尝试解码矢量图形,请使用以下代码

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    drawable = (DrawableCompat.wrap(drawable)).mutate();
}

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

return bitmap;
}

同时确保您在应用 gradle 中启用了矢量支持。
vectorDrawables.useSupportLibrary = true

你救了我的一天, 我使用Android Studio创建它,使用文件->新建->矢量资产 所以这是一个矢量可绘制对象。 - Marium Jawed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接