Android中如何计算一张图片占用内存大小?

如何计算一张1080x1920的图片有多大呢?

首先分辨率1920x1080表示在显示上,长为1920个像素点,宽为1080个像素点,要想知道一个图片大小其实就是需要知道一个像素有多大。

在Android平台中,针对图片质量(颜色深度) 以及 显示透明/半透明颜色 划分出四种常用的位图配置(定义在Bitmap.Config中),用来描述像素的存储方式。如下:

  • Bitmap.Config.ALPHA_8:每个像素用8比特位表示,占1个字节,只有透明度,没有颜色。
  • Bitmap.Config.RGB_565:每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位,上面的图已经有作说明。
  • Bitmap.Config.ARGB_4444:每个像素用16比特位表示,占2个字节,由4个4位组成,ARGB分量都是4位。
  • Bitmap.Config.ARGB_8888:每个像素用32比特位表示,占4个字节,由4个8位组成,ARGB分量都是8位。

所以相同分辨率但不同质量的图片所占用的大小也是不一样的。
例如:一个分辨率为1080x1920的RGB_565图片大小为:1080x1920x2Byte = 4050KB ≈ 3.96MB

Android中常用的配置是RGB_565ARGB_8888两种,默认是ARGB_8888


1、直接获取一个Bitmap对象的内存大小

/**
 * 获得Bitmap的占用内存的大小
 * getAllocationByteCount() 、 getByteCount()
 * @param bitmap
 * @return Bitmap占用内存大小 Byte
 */
private fun getBitmapSize(bitmap: Bitmap): Int {
    return BitmapCompat.getAllocationByteCount(bitmap)
}

2、根据宽、高和位图配置,计算Bitmap占用内存的大小

/**
 * @param width 宽 px
  * @param height 高 px
  * @param config Bitmap.Config
  * @return 图片占用内存大小 Byte
  */
 operator fun get(width: Int, height: Int, config: Bitmap.Config): Int {
     //每像素占用内存大小
     var perByte = when (config) {
         Bitmap.Config.ALPHA_8 -> { 1 }
         Bitmap.Config.RGB_565 -> { 2 }
         Bitmap.Config.ARGB_4444 -> { 2 }
         Bitmap.Config.ARGB_8888 -> { 4 }
         else -> { 2 }
     }
     //计算Bitmap内存大小
     return width * height * perByte
 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值