【问题标题】:The memory of Bitmap decodeBitmap解码的内存
【发布时间】:2015-04-16 12:27:56
【问题描述】:

我有一些关于位图解码的问题。

  1. 当我尝试使用 BitmapFactory.decodeByteArray 从 byte[] 数组中解码 Bitmap 时,结果位图中的 param byte[] 和 mBuffer byte[] 有什么区别。当函数返回时,位图是否仍保留对 byte[] 参数的引用?

  2. 当我使用以下代码从 sdcard 中的 jpg 文件解码位图时:

    File file = new File(getExternalCacheDir(), "large.jpg");
    bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
    if(mImageView != null){
        mImageView.setImageBitmap(bitmap);
    }
    

    此jpg文件分辨率为10800*5400,大小为13.82M,结果位图不为空,没有OOM错误,但位图不显示。怎么可能?我认为在这种情况下,android 应该抛出一个 OOM 错误,以便我可以捕获它以尝试再次缩小位图。但它什么也没显示。这似乎不合理。有人知道原因吗?

【问题讨论】:

  • “结果位图中的参数 byte[] 和 mBuffer byte[] 有什么区别”——第一个将保存 PNG、JPEG 等格式的内容。第二个保存解码图像的 AARRGGBB 字节。
  • @CommonsWare 谢谢。很好理解!

标签: android bitmap


【解决方案1】:

幸运的是,我发现当我将 layerType 设置为 LAYER_TYPE_SOFTWARE 时,位图就会显示出来。所以我相信硬件渲染器有图像大小限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2017-08-07
    • 2018-12-25
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多