加载方式
decodeFile 从文件系统加载
decodeResource 从本地资源中加载
decodeStream 从输入流加载
decodeByteArray 从字节数组中加载
decodeFile和decodeResource会间接调用decodeStream方法
占用的内存
计算公式:bitmapInRam = bitmapWidth*bitmapHeight*像素占用的内存
常用的参数有ARGB_4444、ARGB_8888、RGB_565
bitmapWidth和图片实际的尺寸有时并不相同,如果加载的是资源文件夹下的的图片则有可能会缩放。
资源文件夹对大小的影响
先看代码,我们读取的是 drawable 目录下面的图片,用的是 decodeResource 方法
inDensity 就是原始资源的 density,inTargetDensity 就是屏幕的 density,对应关系如下:
inDensity
资源文件夹 | inDensity |
---|---|
xxhdpi | 480 |
xhdpi | 320 |
hdpi | 240 |
mdpi | 160 |
inTargetDensity
分辨率 | inTargetDensity |
---|---|
1080x1920 | 480 |
720x1280 | 320 |
480x800 | 240 |
320x480 | 160 |
最后到了 nativeDecodeStream 方法,不重要的代码直接略过,直接给出最关键的 doDecode 函数的代码
完整的公式:
bitmapInRam = imageWidth*imageHeight*像素占用的内存*(inTargetDensity/inDensity)²
网络图片和Assert目录下的图片
加载原图,不会进行缩放