Android加载大图避免OOM
来源:互联网 发布:c语言写的游戏 编辑:程序博客网 时间:2024/06/05 08:46
先看错误吧:
Out of memory on a 122880016-byte allocation.04-06 22:53:13.992 16692-16692/com.cxx.loadbigimg E/AndroidRuntime: FATAL EXCEPTION: main Process: com.cxx.loadbigimg, PID: 16692 java.lang.OutOfMemoryError
在这要做一个普及就是图片的大小并不是我们看到的图片具体有多大如2.2M,它的计算公式是:图片的总像素*每个像素的大小。在Android上采用ARGB的方式表示颜色每个像素占4byte。
在这个项目中我们可以看到应用程序申请了122880016byte大小的空间等于117M的大小所以导致内存溢出,那我们的做法就是采用压缩来解决主要可以分为如下几个步骤:
- 获取手机分辨率
- 创建图片工厂的配置参数
- 设置属性不去真正解析Bitmap返回一个null,能得到图片的宽和高
- 通过设置的属性加载Bitmap
- 得到图片的宽和高
- 计算缩放比
- 按照缩放比显示
- 真正解析图片
//1.获取手机分辨率 WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); int width = windowManager.getDefaultDisplay().getWidth(); int height = windowManager.getDefaultDisplay().getHeight(); //2.创建图片工厂的配置参数 BitmapFactory.Options options = new BitmapFactory.Options(); //3.设置属性不去真正解析Bitmap返回一个null,能得到图片的宽和高// options.inJustDecodeBounds = true; //4.通过设置的属性加载Bitmap BitmapFactory.decodeResource(getResources(), R.drawable.dog, options); //5.得到图片的宽和高 int outWidth = options.outWidth; int outHeight = options.outHeight; //6.计算缩放比 int mscare = 1; int scareX = outWidth / width; int scareY = outHeight / height; int min = Math.min(scareX, scareY); if (min > 1) { mscare = min; } //7.按照缩放比显示 options.inSampleSize = mscare; //8.真正解析图片 options.inJustDecodeBounds = false; Bitmap scareBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dog, options); img.setImageBitmap(scareBitmap);
总共分为这八步就可以实现图片的压缩了。
源码地址:
源码地址
0 0
- Android加载大图避免OOM
- Android加载大图避免程序OOM
- android 高效加载大图片,避免OOM
- Android 高效加载大图片避免OOM
- Android 大图片加载 避免OOM
- Android 高效加载大图片避免OOM
- Android 高效加载大图片避免OOM
- 加载大图避免出现OOM
- Android加载大图片方法-避免oom错误
- Android加载大图避免oom--压缩图片大小+LruCache
- Android高效加载大图、多图避免程序OOM
- 加载大图避免OOM的方法
- 如何高效的加载大图,避免oom
- android加载大图,防止oom
- Android加载大图OOM问题
- Android 加载大图不会OOM
- Android 大图压缩处理,避免OOM
- Android高效加载大图、多图解决方案,有效避免程序OOM
- 最长公共子串
- Ubuntu 11.04 安装后要做的20件事情 -----------转载
- Android客户端实现注册/登录详解(二)
- 百度定位实现操作
- 记关于工程估量的一些认识
- Android加载大图避免OOM
- 数据库常用sql语句
- Mesos 维护原语 (Maintenance Primitives)
- 设计模式-单例模式(饿汉式,懒汉式)
- C++11可调用对象和bind绑定器
- VS2013 MFC中操作MySQL数据库
- mysql必知必会--第二回 排序检索数据
- java 集合详解
- 有关mac开发配置