前言
Android Bitmap 的一些总结
Bitmap 占用内存大小
Bitmap 实际站用的内容大小可以通过 Bitmap 提供的方法getAllocationByteCount()
获取到。
也可以提前进行估算,估算公式为
图片实际高 x scale x 图片实际宽度 x scale x 图片每个像素占用的 byte
scale 计算方式为 当前设备 densityDpi/图片所在目录dpi
图片所在目录对应的 dpi 如下表
目录 | mdpi | hdpi | xhdpi | xxhdpi | xxxhpi |
---|---|---|---|---|---|
density | 1 | 1.5 | 2 | 3 | 4 |
densityDpi | 160 | 240 | 320 | 480 | 640 |
比如下面这幅图,实际宽高为 1200x800 .
在屏幕密度为 420 的 Pixel2 上,当图片被放在 drawable-xxxhpi 文件夹下时,占用内存为
图片内存 = 1200 x (420/640) x 800 x(420/640) x 4 = 1654800 byte
图片宽度 = 1200 x 420/640
图片高度 = 800 x 420/640
可以看到,当图片放在不同的目录时,图片自身的大小以及所占用的内存都将会有不同的值。
从中也可以看到规律,当图片对应文件夹 dpi 大于 手机 dpi 时,在实际展示的时候将对图片进行缩小的处理,因为 scale 的值小于 1 。当然,如果手机屏幕密度和当前图片所在的文件夹的密度相同的话,那么将不会进行缩放。 反之,一旦 scale 参数大于 1 时,不但图片自身会被放大,占用的内存也会发生较大的增长,毕竟 scale 在计算公式中要做两次乘数。
因此,把图片放到适合主流手机 dpi 的目录下是较好的选择。
BitmapFactory.Options
BitmapFactory.Options 的常用成员变量。
1 | //获取图片信息 |