final Bitmap b = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
我收到空引用错误。
B为空。
为什么?
答案 0 :(得分:1)
这可能对您有所帮助
Drawable d = getResources().getDrawable(R.mipmap.imagefile);
Bitmap b = ((BitmapDrawable)d).getBitmap();
答案 1 :(得分:1)
好问题,我遇到了完全相同的问题(文件完全相同:)
看起来
BitmapFactory.decodeResource可与R.drawable和R.raw完美配合,但不适用于可能由不同屏幕分辨率引起的mipmap,但这只是一个猜测。
在源代码中查找,我只能看到decodeResource调用了Resource#openRawResource(..),文档中说:
...资产文件-即可以用来打开可绘制,声音和 原始资源;它将在字符串和颜色资源上失败。
我认为mipmap文件不被视为原始资源,因为选择密度相关资源时需要进行其他处理。
因此,您将必须指定资源的密度:https://stackoverflow.com/a/41910618/8524651
或者快速又肮脏,只需将该文件的副本移至您的原始文件夹即可。
kotlin中的解决方案代码(决定一种方式;)
val launcherDrawable = ResourcesCompat.getDrawableForDensity(context.resources, R.mipmap.ic_launcher, DisplayMetrics.DENSITY_LOW, context.getTheme());
var bm = BitmapFactory.decodeResource(context.resources, R.raw.ic_launcher)
bm = launcherDrawable!!.toBitmap(launcherDrawable.minimumWidth, launcherDrawable.minimumHeight)