BitmapFactory.Options options = new BitmapFactory.Options();
/*
ARGB: alpha, red, green, blue
ALPHA_8
8位 1byte
每像素1字节 按官方注释是说,只存alpha值,测试后发现,图片照样显示。。
ARGB_4444 16位 2bytes 已过时 像素2字节 (argb各范围为4位,即0~16)
ARGB_8888 32位 4bytes 每像素4字节(argb各范围0~255) 默认值
RGB_565
16位 不含Alpha 每像互2字节r:5bits(0~32), g:6bits(0~64), b:5bits(0~32)
测试发现内存的分配情况: ALPHA_8(23mb) ARGB_8888(23mb) RGB_565(13mb) ARGB_4444(15mb)
以上是反复销毁再创建的内存分配情况, 看出 前两者 较大, 后两者 较小
*/
options.inPreferredConfig = Config.RGB_565; //图片颜色配置
options.inSampleSize = 2; //宽高缩放比 这表示为原始的1/2
/*
如果设置为真,译码器将返回null(位图),但out..属性仍将被设置.
这时生成的bitmap为null, 调用options.outHeight options.outWidth 能取到真实图片的宽高
*/
options.inJustDecodeBounds = true; //仅仅解码 bounds 即宽高,存在对应的out属性中
//decodeStream 比decodeResource 高效
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options);