发布时间:2025-02-01 10:01
1.decodeResource
从drawable、mipmap这种对应的文件目录中加载图片
Bitamp 占用内存大小 = 宽度像素 x (inTargetDensity / inDensity) x 高度像素 x (inTargetDensity / inDensity)x 一个像素所占的内存
inTargetDensity :设备的dpi
inDensity :当前文件所在drawable文件夹目录 对应的dpi
一个像素所占的内存,有以下几种像素格式:
ALPHA_8 1byte
ARGB_4444 2byte
ARGB_8888 4byte
RGB_565 2byte
2.从本地磁盘 、asset、等方式中加载图片
Bitamp 占用内存大小 = 宽度像素 x 高度像素 x 一个像素所占的内存
注意:
当使用第三方库时,则不能用这些公式来计算,因为三方库内部会重新对内存进行优化。
eg:
fresco:不管图片来源是哪里,即使是 res,图片占用的内存大小仍旧以原图的分辨率计算。
Glide:如果有设置图片显示的控件,那么会自动按照控件的大小,降低图片的分辨率加载。图片来源是 res 的分辨率转换规则对它也无效。
注意:
Bitmap的内存大小 和像素大小是不一样的。
内存大小= 像素大小(即图片宽 x 高)x 一个像素所占内存
1、图片分辨率,也就是图片尺寸
2、像素点所占内存大小,对应4种像素格式
所以我在做内存优化时,可以从这二方面来入手:
1.减小图片的尺寸
2.调整为占用内存更小的像素格式。
实际开发中,我们更倾向第一种,因为修改像素格式,会导致图片质量下降,导致失真。
而对第一种,可以参考 Luban
1.Bitmap分析
2.https://www.cnblogs.com/dasusu/p/9789389.html
3.Bitmap分析