图片OOM在手机开发过程中频繁出现,有效控制APP 图片 OOM的方法有:
1,listView 生成视图优化
2,LruCashe缓存
3,软引用,弱引用(SoftReference或WeakReference),但不建议这样做。从Android2.3(API等级9)垃圾收集器开始更积极收集软/弱引用,这使得它们相当无效。此外,在Android 3.0(API等级11)之前,存储在native内存中的可见的bitmap不会被释放,可能会导致应用程序暂时地超过其内存限制并崩溃。
4,图片压缩
本文先介绍两种图片压缩方式,希望高手多多批评指教。
第一:质量压缩:
private Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset();//重置baos即清空baos
options -= 10;//每次都减少10
image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
return bitmap;
}
第二,比例压缩:
private Bitmap getimage(String srcPath) {
BitmapFactory.Options newOpts = new BitmapFactory.Options();
//开始读入图片,此时把options.inJustDecodeBounds 设回true了
newOpts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
float hh = 800f;//这里设置高度为800f
float ww = 480f;//这里设置宽度为480f
//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;//be=1表示不缩放
if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
be = (int) (newOpts.outHeight / hh);
}
if (be <= 0)
be = 1;
newOpts.inSampleSize = be;//设置缩放比例
//重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
}
分享到:
相关推荐
本教程将探讨如何在Android中实现图片的压缩,特别是在一个名为"picture-compress-m552-master"的项目中,该项目提供了高度自定义的图片压缩功能,能够将图片压缩至200h*200w的尺寸。 首先,我们要了解Android中...
在Android开发中,图片处理是...总之,理解并掌握Android图片压缩的技巧对于提升应用性能和用户体验至关重要。通过实践`BitmapCompressDemo`,开发者不仅可以深入理解各种压缩方法,还能学会如何在实际项目中有效应用。
综上所述,Android图片压缩解决方案涉及多个层次和方法,开发者需要根据应用的实际需求和性能要求,选择合适的策略和工具,以确保图片加载的高效性和稳定性,避免ANR的发生。同时,持续关注和学习新的库和技术,也是...
这篇博客“android图片压缩的完整的解决方案”提供了详细的源码解析和实用工具,旨在帮助开发者高效地解决这一问题。 首先,我们来探讨一下Android中图片压缩的基本原理。Android提供了多种API来处理图像,例如...
Luban(鲁班)——Android图片压缩工具,仿微信朋友圈压缩策略。项目描述目前做app开发总绕不开图片这个元素。但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题。单纯对图片进行裁切,压缩已经有很多...
"Android图片压缩尽量不失真100k左右.rar"这个压缩包文件可能包含了实现这一目标的源代码示例。在安卓应用中,图片的压缩是一个关键环节,尤其是当需要保持图片质量的同时减小文件大小,以适应网络传输或存储空间的...
本资源提供了一个基于Eclipse的Android图片压缩的Demo,通过分析和实践这个Demo,开发者可以了解并掌握Android图片压缩的基本原理和技术。 首先,我们来看图片压缩的基本方法。Android提供了多种图片处理库,如...
本压缩包"Android图片压缩结合多种压缩方式.zip"提供了一种综合解决方案,它结合了尺寸压缩、质量压缩以及JNI(Java Native Interface)调用libjpeg库进行的压缩,旨在在保证图片清晰度的同时,将图片内存大小控制在...
这个"android图片压缩的处理.zip"文件很可能是包含了一些示例代码或库,用于帮助开发者了解和实现Android平台上的图片压缩技术。下面将详细讨论Android图片压缩的基本原理、常用方法以及可能涉及到的技术点。 1. **...
综上所述,Android图片压缩涉及到图像处理的基本概念、Bitmap对象的操作、文件I/O以及用户界面的交互等多个方面。理解并熟练掌握这些知识点,可以帮助开发者有效地优化应用的性能,提供更好的用户体验。
android 照片获取 压缩存储代码 经过实际项目测试相当稳定
本项目名为“android图片压缩终极方案”,它利用了NDK(Native Development Kit)并结合JPEG库的哈夫曼编码算法来实现图片的无损压缩。 NDK是Google提供的一个工具集,允许开发者在Android应用中使用C和C++代码。...
标题提到的"Android图片压缩",通常涉及到以下几个关键技术点: 1. **图片格式理解**:JPEG、PNG等常见图片格式的压缩原理,以及它们在内存和存储空间上的差异。例如,JPEG采用有损压缩,适合连续色调的图像;而PNG...
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:...android图片压缩总结 总 结来看,图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能
通过分析和学习这个示例,开发者可以更好地理解和掌握Android图片压缩的技巧,以达到在不引发OOM的前提下,保持图片的高保真度。 总结来说,处理Android中的大图,我们需要合理地使用`BitmapFactory.Options`进行...
上传图片时按照服务器限制对图片进行压缩,工具类进行了宽度、高度、图片大小进行循环判断压缩。供大家参考如有问题欢迎指出,积分缺乏忘老板们体谅
《Android图片压缩技术:LuBan鲁班库的深度解析与应用》 在移动开发领域,尤其是在Android平台上,图片处理是一项必不可少的技术。面对用户上传的高分辨率照片,如何在保证显示效果的同时,有效压缩图片大小,减少...
总结,Android图片压缩的关键在于找到合适的压缩算法、压缩质量与文件大小之间的平衡。在不改变图片质量的前提下压缩图片,需要尝试不同的压缩策略,如调整JPEG或PNG的压缩质量,或者利用第三方库提供的高级功能。...
android 图片压缩。有需要的可以自己完善
总结,Android图片压缩和加水印是提高应用性能和保护版权的重要手段。开发者可以根据项目需求选择合适的方法,结合Android SDK和第三方库来实现高效、美观的功能。在AddWatermark-master这个项目中,你可能找到更...