关于图片加载的相关计算

88 阅读2分钟

一、图片大小的计算

这里涉及到两种大小,一个是通过网络下载到磁盘占用磁盘的大小;另一个就是加载到手机内存中显示时所占用的手机内存大小。

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