图片大小的影响因素
android中大的图片一般要经过压缩才显示,否则可能会发生OOM。
图片所占用的内存和图片的宽度、长度、单位像素占的字节数三个因素有关。
图片色彩
我们都知道颜色经常用ARGB来表示,A表示Alpha,即透明度;R表示red,即红色;G表示green,即绿色;B表示blue,即蓝色。Bitmap的色彩也是用ARGB来表示的
Bitmap.Config
Bitmap.Config中有Bitmap.Config.ALPHA_8、Bitmap.Config.RGB_565、Bitmap.Config.ARGB_4444、Bitmap.Config.ARGB_8888有四个枚举变量。
Bitmap.Config.ALPHA_8表示:每个像素占8位,没有色彩,只有透明度A-8,共8位。
Bitmap.Config.ARGB_4444表示:每个像素占16位,A-4,R-4,G-4,B-4,共4+4+4+4=16位。
Bitmap.Config.RGB_565表示:每个像素占16位,没有透明度,R-5,G-6,B-5,共5+6+5=16位。
Bitmap.Config.ARGB_8888表示:每个像素占32位,A-8,R-8,G-8,B-8,共8+8+8+8=32位。
位数越高,那么可存储的颜色信息越多,图像也就越逼真。
Bitmap内存计算
ARGB_8888是最占内存的,因为一个像素占32位,8位=1字节,所以一个像素占4字节的内存。ARGB_4444的一个像素占2个字节。RGB_565的一个像素也是占两个字节。ALPHA_8的一个像素只占一个字节。
一个图片的像素=图片宽度 × 图片长度。
一张图片(BitMap)占用的内存=图片宽度×图片长度×单位像素占用的字节数(图片的像素×单位像素占用的字节数)
假设有一张480x800的图片,四个格式下所占的内存如下
类型 | 内存计算 | 占内存大小(B | 占内存大小(KB) |
---|---|---|---|
ARGB_8888 | 480×800×4 | 1536000 | 1536000÷1024=1500 |
ARGB_4444 | 480×800×2 | 768000 | 768000÷1024=750 |
ARGB_565 | 480×800×2 | 768000 | 768000÷1024=750 |
ARGB_8 | 480×800×1 | 384000 | 384000÷1024=375 |