位图解码返回null

时间:2017-12-13 02:06:16

标签: android android-bitmap bitmapfactory

final Bitmap b = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);

我收到空引用错误。

  

B为空。

为什么?

2 个答案:

答案 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)