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


更多相关文章

  1. Android实用视图动画及工具系列之四:多状态CheckBox,可设置大小尺
  2. 源码解析Android中View的measure量算过程
  3. android 新浪微博客户端的表情功能的实现
  4. android 新浪微博客户端的表情功能的实现
  5. android 新浪微博客户端的表情功能的实现
  6. android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略
  7. android 新浪微博客户端的表情功能的实现
  8. Android(安卓)APP设计加载使用gif动图需要注意的一般性问题
  9. android 安全讲座第四层 手机Root授权原理细节全解析(2)

随机推荐

  1. Android知识体系总结之Android部分View绘
  2. Android(安卓)studio 3.1.4 无法获取pom
  3. Android自动完成文本框
  4. Android概述
  5. Android中ExpandableListView控件基本使
  6. android ApiDemo学习(一)service总结
  7. 不用SDK manager 下载 Android(安卓)sdk
  8. Android横屏预竖屏
  9. android中数据存储
  10. 使用Android(安卓)Studio调试smail源码