android中对每个app使用的内存都有严格的限制,一般默认都是16MB,而此时我们如果需要加载一张像素超大的图片的大(如18MB)的图片的话那肯定会oom了(像素大的图片现在是很多了)。。。但是当我们用android系统自带的图片浏览器打开的时候不会出现这样的oom,纳尼这android系统自带的图片浏览器难不成不是用咋们java搞出来的吗?其实我们只需要一下几个步骤就可以搞定这种大图片在我们android应用中放心加载大图片了...
A: BitmapFactory.Options的引入
我们通过 BitmapFactory.Options来把大的图片进行无质量损坏的压缩
BitmapFactory.Options opts = new Options();
//这句话不去解析图片,而只是获取图片的头部信息(包含了图片所有的信息例如宽、高等)
opts.inJustDecodeBounds = true;
BitmapFactoty.decodeFile("/sdcard/a.jpb",opts);
int imgWidth = opts.outWidth;
int imgHeight = opts.outHeight;
B: 进行缩放即可
//这个时候,我们需要来计算一个缩放比,这里以320*480的手机宽、高为对比值,实际开发中需要根据具体的业务逻辑来判断到底需要什么样的对比值
int scaleX = imgWidth/windowWidth; //水平方向的缩放比
int scaleY - imgHeight/windowHeitht; //垂直方向的缩放比
int scale = 1 //缩放比
PS: 缩放比要选择较大的值,如果你选择小缩放比的话那较大的那部分没有切完吧骚年
if(scaleX > xxaleY && scaleY > 1){
scale = scaleX;
}else if(scale Y > scaleX && scaleX > 1){
scale = scaleY;
}
//接下来解析图片
opts.inJustDecodeBounds = false;
//采样率
opts.inSampleSize = scale;
BitmapFactoty.decodeFile("/sdcard/a.jpb",opts);
搞完手工即可
PS说明: 如果我们上面得到的scale = 4,则新解析得到的图片的宽、高都是原图片的宽、高的1/4,新解析得到的图片是原来图片的1/16