Android计算图片占用内存

图片(Bitmap)占用内存计算公式:


 图片长度 * 图片宽度 * 单位像素占用的字节数


单位像素占用的字节数与图片解码方式有关:

https://developer.android.com/reference/android/graphics/Bitmap.Config.html




ALPHA_8:只存储透明度,不存储颜色值,单位像素占用一个字节。

ARGB_4444:在Android API13已弃用,因为配置的图片质量差,目前用ARGB_8888代替。

ARGB_8888:单位像素占用四个字节


每个通道用8个bit存储,共256种可能值。这种配置非常灵活和高质量,推荐使用!!!


RGB_565:只存储颜色值,而不存储透明度,每个像素占用2个字节。


注意:

1、如果图片没有透明通道,建议使用RGB_565,因为使用ARGB_8888明显浪费了内存,当图片很多时容易出现OOM,从网上下载的图片建议使用RGB_565;

2、Android默认的解码方式是ARGB_8888




延伸:(密度和像素的关系)


DisplayMetrics中的两个变量density、densityDpi,官方文档:




简单说,density 的数值是 1dp=density px,densityDpi 是屏幕上每英寸对应多少个点(不是像素点pixel)

在DisplayMetrics中:

densityDpi = 160 * density


Android R而source:


我们新建一个Android项目后应该可以看到很多drawable文件夹,分别对应不同的dpi

drawable-ldpi (dpi=120, density=0.75)

drawable-mdpi (dpi=160, density=1)

drawable-hdpi (dpi=240, density=1.5)

drawable-xhdpi (dpi=320, density=2)

drawable-xxhdpi (dpi=480, density=3)


计算一张图片(268 * 268)在不同资源目录下占用内存情况:



打印结果:


参考链接:

http://sodino.com/2015/05/25/check-bitmap-size/

http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498


你可能感兴趣的:(Android)