在android中的很多应用中都需要拍照上传图片,随着手机的像素越来越高,拍摄的图片也越来越大。在拍摄后显示的时候,使用universalimageloader.这个开源项目可以避免内存溢出。但是在上传的时候,一般需要压缩,但是压缩的时候很容易导致内存溢出。解决的办法就是,压缩后的二进制流,不用导出Bitmap,而是直接存储为本地文件,上传的时候直接通过本地文件上传。代码如下:
1.图片压缩获取输入流
/** * 压缩图片获取输入流 * @param image * @return */ public static InputStream compressImage3(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; return isBm; }
2.将输入流写入文件,代码如下:
InputStream in=ImageLoadUtil.compressImage3(bitmap); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } try { FileOutputStream out = new FileOutputStream(file); byte[] buf=new byte[64]; int len; while((len=in.read(buf))>-1){ out.write(buf, 0, len); } //bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); out.flush(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
相关推荐
通过以上策略,我们可以显著优化Android应用中的图片加载,避免内存溢出问题,同时提升用户体验。实际开发中,应根据项目需求和性能要求,灵活选择和组合这些技术。在提供的"PhotoWallFallsDemo"示例中,可能就包含...
本文将深入探讨如何有效地下载和处理图片,以避免内存溢出问题。 首先,我们需要理解Android内存管理机制。每个Android应用都有一个独立的Dalvik虚拟机实例,分配一定的内存空间。当加载大图或大量小图时,如果超过...
通过这种方式可以获取到图片的大小信息,然后根据需要调整图片的尺寸,避免内存溢出。 2. **使用inSampleSize属性进行下采样**:在`BitmapFactory.Options`中设置`inSampleSize`属性为大于1的整数,表示对原图进行...
然而,随着应用程序功能的日益丰富,尤其是涉及到图像处理的应用,如何有效管理内存资源,避免内存溢出(Out Of Memory,简称OOM)成为了亟待解决的问题。在Android应用中,Gallery(画廊)组件被广泛用于展示和浏览...
综上所述,Android图片压缩解决方案涉及多个层次和方法,开发者需要根据应用的实际需求和性能要求,选择合适的策略和工具,以确保图片加载的高效性和稳定性,避免ANR的发生。同时,持续关注和学习新的库和技术,也是...
总的来说,安卓图片压缩的核心目标是合理控制图片的内存占用,避免一次性加载过大图片导致的内存溢出。通过选择合适的压缩方法和库,结合内存管理和异步加载策略,可以有效地解决这个问题,实现更流畅、更节省资源的...
这篇博客“android图片压缩的完整的解决方案”提供了详细的源码解析和实用工具,旨在帮助开发者高效地解决这一问题。 首先,我们来探讨一下Android中图片压缩的基本原理。Android提供了多种API来处理图像,例如...
标题"图片压缩节约内存"直接指向了这个核心目标:通过压缩图片来减少应用程序对内存的占用,从而提高性能并避免内存溢出的问题。这在处理大量图片,如在ListView中异步加载时尤其关键。 首先,我们要理解图片的存储...
综上所述,这个优化版的Android图片瀑布流解决方案综合运用了多种技术手段,以防止内存溢出,提升应用的稳定性和性能。开发者在实现自己的瀑布流布局时,可以参考这些优化策略,为用户提供流畅且高效的图片浏览体验...
通过分析和学习这个示例,开发者可以更好地理解和掌握Android图片压缩的技巧,以达到在不引发OOM的前提下,保持图片的高保真度。 总结来说,处理Android中的大图,我们需要合理地使用`BitmapFactory.Options`进行...
为了解决这个问题,我们需要了解 Android 加载大图片的机制,并掌握一些防止内存溢出的技巧。 首先,我们需要了解 Android 加载图片的机制。在 Android 中,加载图片可以使用多种方法,如 setImageBitmap、...
本文将详细介绍如何解决在gallery中加载大量图片导致的内存溢出问题。 首先,我们需要理解Android的内存管理机制。Android系统使用Dalvik或ART虚拟机运行应用程序,它们都有内存限制。当加载大图或大量图片时,如果...
本资源提供了一个基于Eclipse的Android图片压缩的Demo,通过分析和实践这个Demo,开发者可以了解并掌握Android图片压缩的基本原理和技术。 首先,我们来看图片压缩的基本方法。Android提供了多种图片处理库,如...
它们能自动处理图片大小,避免内存溢出,并且支持动态调整图片大小和质量。 7. **压缩算法**: 对于有损压缩,JPEG使用DCT(离散余弦变换);对于无损压缩,PNG采用色块压缩。开发者还可以自定义压缩算法,例如...
本文将详细探讨几种解决Android内存溢出的方法。 首先,针对图像导致的内存溢出,一种常见的解决方案是使用`BitmapFactory.Options`类进行图片解码时的尺寸控制。例如,在创建`Bitmap`对象时,可以设置`...
本篇文章将深入探讨如何在ListView中实现图片和文字的异步加载,以优化性能,避免内存溢出,并提高滑动效率。 一、内存溢出与滑动效率问题 1. 内存溢出:当应用程序请求的内存超过系统分配的最大值时,就会发生内存...
3. **避免内存溢出**: 大图片直接加载到内存可能导致`OutOfMemoryError`。为了避免这种情况,可以使用上述的`inSampleSize`来预加载缩放后的图片,或者使用`Bitmap.createScaledBitmap()`来动态调整Bitmap的尺寸。...
在Android开发中,ViewPager是一个非常常用的组件...通过以上方法,可以有效地解决ViewPager加载大量图片导致的内存溢出问题,同时提高应用的性能和用户体验。在实际开发中,应结合项目的具体需求选择适合的优化策略。