【问题标题】:Bitmap decoding returning null位图解码返回 null
【发布时间】:2017-12-13 02:06:15
【问题描述】:
final Bitmap b = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);

我收到空引用错误。

B 为空。

为什么会这样?

【问题讨论】:

  • 您的活动或片段为空。
  • activity 是我得到空值的地方。
  • 请检查 import android.graphics.Bitmap;导入android.graphics.BitmapFactory;在你的活动中
  • 我已经有了。
  • 你能发布堆栈跟踪吗?

标签: android android-bitmap bitmapfactory


【解决方案1】:

很好的问题,我遇到了完全相同的问题(使用完全相同的文件:)
看起来 BitmapFactory.decodeResource 与 R.drawable 和 R.raw 非常完美,但不适用于可能由不同屏幕分辨率引起的 mipmap,但这只是一个猜测。
查看源代码我只能看到 decodeResource 调用 Resource#openRawResource(..) 并且文档说:

... 资源文件——也就是说,它可以用来打开drawable、sound和 原始资源;它会在字符串和颜色资源上失败。

我猜 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)

【讨论】:

    【解决方案2】:

    这可能对你有帮助

     Drawable d = getResources().getDrawable(R.mipmap.imagefile);
     Bitmap b = ((BitmapDrawable)d).getBitmap();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2015-02-22
      • 2015-09-18
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多