一、图片大小的计算
这里涉及到两种大小,一个是通过网络下载到磁盘占用磁盘的大小;另一个就是加载到手机内存中显示时所占用的手机内存大小。
1.存储到磁盘所占用的大小:size = 长 x 宽 x 每个像素的大小
例如:一张格式为ARGB_8888,长800像素,宽400像素的图片,所占磁盘的大小为800x400x4=1280000B=1250KB=1.22MB
PS:这里像素点大小以 4B 来计算是因为,当没有特别指定时,系统默认为 ARGB_8888 作为像素点的数据格式,其他的格式如下:
ALPHA_8 -- (1B)
RGB_565 -- (2B)
ARGB_4444 -- (2B)
ARGB_8888 -- (4B)
RGBA_F16 -- (8B)
2. 加载到手机内存的大小:
当图片放在 res 内的不同目录中时,系统在加载 res 目录下的资源图片时,会根据图片存放的不同目录做一次分辨率的转换,而转换的规则是:
新图的高度 = 原图高度 x (设备的 dpi / 目录对应的 dpi )
新图的宽度 = 原图宽度 x (设备的 dpi / 目录对应的 dpi )
所以,占用手机内存的大小为: size = 新长 x 新宽 x 每个像素的大小
例如:一张格式为ARGB_8888,长800像素,宽400像素,位于res/drawable-xhdpi目录下的图片加载到dpi为240的手机所占内存的大小为:800x(240/320)x400x(240/320)x4=703.1KB=0.68MB
PS:目录名称与 dpi 的对应关系如下,(drawable 没带后缀对应 160 dpi):
- ldpi --- 120
- mdpi --- 160
- hdpi --- 240
- xhdpi --- 320
- xxhdpi --- 480
- xxxhdpi --- 640