java - 从 Drawable Resource Id 解码位图给出 null
问题描述
我想从可绘制资源 id 中获取位图,我找到了使用 BitmapFactory 解码方法对其进行解码的解决方案,但它给出了 null。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_tick);
解决方案
请检查您是否使用 Vector drawable 或普通 png/jpeg 图像作为 drawable,如果您尝试解码 vector drawable,它会给出空值。
如果您尝试解码 Vector 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
推荐阅读
- powershell - 如何使 powershell 文本框只接受字母或数字字符?
- java - 在 Java 应用程序中使用外部包时,是否需要将它们完全包含在 JAR 中?
- c++ - 调用 PCACompute 方法是 OpenCV C++
- javascript - Firefox 60.5.1 中的 Web 控制台中的复制功能是什么?
- c# - 状态 500:InvalidOperationException:没有路由与提供的值匹配
- javascript - 为什么我们在调用 on('change', new func(){myfunc()}) 时需要创建一个新函数而不是使用现有函数?
- r - 需要 TRUE/FALSE 的缺失值-rma.mv
- c# - 使用滚动条重新定位对象
- angular - 为什么我无法在 Ionic 4 应用程序中使用 ActivatedRoute 检索 tabs.page.ts 中的 URL 参数?
- regex - 如何匹配子字符串和字符串本身?