最近在写图片发送到后台,遇到一个奇怪问题,当使用BitmampFactory.Options处理图片防止过大图片OOM时,使用如下代码获取 bitmap,
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
Bitmap bmp = BitmapFactory.decodeStream(is,null,options);
获取出来的bmp = null,
原因就出在decodeStream这个方法上,之前网上找到的资料都使用
Bitmap bmp = BitmapFactory.decodeFile(path, options); 这个方法来获取bitmap,原因就在decodeStream 和 decodeFile上,使用decodeStream方法时候,解析的inputStream需要重新获取一遍,否则出来的bitmap将会是null,
InputStream is = cr.openInputStream(uri);
Bitmap bmp = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is,null,options);
int imageWith = options.outWidth;//获取图片宽
int imageHeight = options.outHeight;//获取图片高
//获取可以使用的bitmap
options.inSampleSize = 8;
options.inJustDecodeBounds = false;
is = cr.openInputStream(uri);
bmp = BitmapFactory.decodeStream(is,null,options);
在再次使用inputStream的时候,再次获取下is就可以避免bitmap获取出来为null了。