内存中Bitmap大小的计算公式:
长占用的像素 宽占用的像素 每个像素占用的内存
避免OOM也就是要减小图片在内存中的大小,有两种方式等比缩小长宽和减少每个像素占用的内存。

  • 等比缩小长宽:
    Bitmap的创建是通过BitmapFactory的工厂方法decodeFile()、decodeStream()、decodeByteArray()、decodeResource()。这些方法在创建Bitmap使都一个参数Options,Options中的属性inSampleSize用来对图片进行长宽的设置,inSampleSize的值是2的幂次方,通过设置合适的值来对图片进行缩放操作。

  • 减少像素内存:
    Options中的属性inPreferredConfig,通过调整这个值的属性来改变每个像素所占的内存,默认值是ARGB_8888,修改为RGB_565或ARGB_4444可以减少一半的内存。

含义
ARGB_8888 A(Alpha)、R(Red)、G(Green)、B(Blue)各占8位的精度,加起来32位的精度(即4个字节),也就是一个像素占4个字节的长度
ARGB_4444 A(Alpha)、R(Red)、G(Green)、B(Blue)各占4位的精度,加起来16位的精度(即2个字节),也就是一个像素占2个字节的长度
RGB_565 R(Red)占5位精度、G(Green)占6位精度、B(Blue)占5位精度,一共16位精度,也就是2个字节,不携带透明度信息
ALPHA_8 每个像素占位(即一个字节),只办函透明度值,不携带颜色信息