一张Bitmap图片可以压缩成多大内存

Android里面加载大图片的话很容易引起内存溢出,out of memory,因为如果你如果把一张很大的原图加载到ImageView的话,会提示
这里写图片描述
一张图片在内存中占有多大呢,Bitmap有个函数可以直接获取内存中占有的大小。我们看下Bitmap类里面

 /**
     * Returns the minimum number of bytes that can be used to store this bitmap's pixels.
     *
     * <p>As of {@link android.os.Build.VERSION_CODES#KITKAT}, the result of this method can
     * no longer be used to determine memory usage of a bitmap. See {@link
     * #getAllocationByteCount()}.</p>
     */
    public final int getByteCount() {
        if (mRecycled) {
            Log.w(TAG, "Called getByteCount() on a recycle()'d bitmap! "
                    + "This is undefined behavior!");
            return 0;
        }
        // int result permits bitmaps up to 46,340 x 46,340
        return getRowBytes() * getHeight();
    }

其中getRowBytes()是获取一行像素的内存大小。我们可以用getByteCount来获取图片的大小。比如我们项目里放一张10M的图片,然后执行getByteCount(),然后将大小打印出来。
如果要自己手算的话,也是可以算的,不过比较麻烦:
这里写图片描述
当图片以格式ARGB_8888存储时的计算方式

占用内存=图片长*图片宽*4字节

图片长 = 图片原始长 (设备DPI/文件夹DPI)
图片宽 = 图片原始宽(设备DPI/文件夹DPI)
好了。
比如我这张图片的大小如果是9318427byte的话(暂时还想不到办法得到一张完整10兆的图片,只能近似地取了一张9M多的图片)。那么执行函数的到的大小是162739584 325479168 当前的设备dpi为420,文件夹是mdpi,也就是240.然后算一下, (420/240)* (3968*2976)* 4= 82661376 byte 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值