Bitmap的加载

加载方式

  1. decodeFile 从文件系统加载

  2. decodeResource 从本地资源中加载

  3. decodeStream 从输入流加载

  4. decodeByteArray 从字节数组中加载

  5. 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目录下的图片

加载原图,不会进行缩放