关于设置图片时,内存溢出的解决方法
2017-07-31 14:34
267 查看
不知道大家在使用ImageView的setImageBitmap方法时,有没有遇到过一旦给ImageView设置比较大的图片,就会导致内存溢出这样的问题。希望我所用的方法在一定程度上可以帮助大家~~
废话不多说,开始搞事情~~
在此,对于inSampleSize进行说明一下:
对大图进行降采样,以减小内存占用。因为直接从点阵中隔行抽取最有效率,所以为了兼顾效率, inSampleSize 这个属性只认2的整数倍为有效.
比如你将 inSampleSize 赋值为2,那就是每隔2行采1行,每隔2列采一列,那你解析出的图片就是原图大小的1/4.
这个值也可以填写非2的倍数,非2的倍数会被四舍五入.
废话不多说,开始搞事情~~
/** * 通过图片路径读取图片并通过对图片进行处理,从而减小图片的内存体积,避免内存溢出 * @param imgpath 需要处理的图片路径 * @param w 欲设定的宽度 * @param h 欲设定的高度 */ public static Bitmap loadBitmap(String imgpath, int w, int h) { BitmapFactory.Options opts = new BitmapFactory.Options(); //将option的injustDecodeBounds设为true时,解码bitmap时可以只返回它的宽、高和MIME类型,而不必为其申请内存,从而节省了内存空间。 opts.inJustDecodeBounds = true; BitmapFactory.decodeFile(imgpath, opts); //获取原图片的宽 int srcWidth = opts.outWidth; //获取原图片的高 int srcHeight = opts.outHeight; int destWidth = 0; int destHeight = 0; //缩放比例 double ratio = 0.0; //原图的宽高其中一个小于预设值时,则选用原图的宽高 if (srcWidth < w || srcHeight < h) { ratio = 0.0; destWidth = srcWidth; destHeight = srcHeight; } else if (srcWidth > srcHeight) { //原图的宽高都大于预设的宽高且宽的值比高的值要大,则选用宽的缩放比率 ratio = (double) srcWidth / w; destWidth = w; destHeight = (int) (srcHeight / ratio); } else { //原图的宽高都大于预设的宽高且高的值比宽的值要大,则选用高的缩放比率 ratio = (double) srcHeight / h; destHeight = h; destWidth = (int) (srcWidth / ratio); } //创建一个新的Options BitmapFactory.Options newOpts = new BitmapFactory.Options(); //对图片的采样点进行隔行抽取,以减少图片的内存 newOpts.inSampleSize = (int) ratio + 1; newOpts.inJustDecodeBounds = false; newOpts.outHeight = destHeight; newOpts.outWidth = destWidth; 通过新的配置好的options进行图片的解析 Bitmap tempBitmap = BitmapFactory.decodeFile(imgpath, newOpts); return tempBitmap; }
在此,对于inSampleSize进行说明一下:
对大图进行降采样,以减小内存占用。因为直接从点阵中隔行抽取最有效率,所以为了兼顾效率, inSampleSize 这个属性只认2的整数倍为有效.
比如你将 inSampleSize 赋值为2,那就是每隔2行采1行,每隔2列采一列,那你解析出的图片就是原图大小的1/4.
这个值也可以填写非2的倍数,非2的倍数会被四舍五入.
相关文章推荐
- 关于 QWidget无法使用stylesheet设置自身backgound-color(背景色)和border-image(背景图片) 的解决方法
- 关于设置 存储 内部存储空间只显示图片不显示视频的解决方法
- 关于TextBox设置成MultiLine属性后控制字数的解决方法
- 关于span不能设置宽度及span自动换行的解决方法
- 解决IE6下JS动态设置图片IMG的SRC时图片无法加载错误的方法
- 关于动态创建dsn时不能设置用户名和密码的解决方法
- 关于在设置启动文件夹或者设置用户选项时不能得到当前用户的解决方法
- 关于在II7里面出现:当前信任级别设置不支持调试 的解决方法
- 关于EwebEeditor 不能上传图片问题解决方法
- 关于span不能设置宽度及span自动换行的解决方法
- 关于图片资源在android2.1/2.2/2.3下无法显示的问题以及解决方法
- 设置背景图时防止图片拉伸的解决方法
- 【原创】关于更改桌面背景图片不见效的一种解决方法
- android中由于下载图片造成的内存溢出的解决方法
- 转:bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方法
- 关于vc6.0中常见的因为工程设置project setting设置不对而造成连接错误的一些情况和解决方法(转)
- 关于无法设置超级工作站的解决方法
- 关于将RadioButtonList的AutoPostBack属性设置为"True"获取子项时候引起回发的问题解决方法
- 关于.NET点击图片就可刷性验证码的问题解决方法
- 关于outlook部分邮件不能显示图片的解决方法