`
程言方
  • 浏览: 47991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

已最节省内存的方式获取图片

 
阅读更多
/**
  * 以最省内存的方式读取本地资源的图片
   * @param context
* @param resId
* @return
    */ 
public static Bitmap readBitMap(Context context, int resId){ 
BitmapFactory.Options opt = new BitmapFactory.Options(); 
opt.inPreferredConfig = Bitmap.Config.RGB_565;  
  opt.inPurgeable = true; 
opt.inInputShareable = true; 
//获取资源图片 
InputStream is = context.getResources().openRawResource(resId); 
return BitmapFactory.decodeStream(is,null,opt); 
}

节省内存的其他方式:
1. InputStream is = this.getResources().openRawResource(R.drawable.pic1);
     BitmapFactory.Options options=new BitmapFactory.Options();
     options.inJustDecodeBounds = false;
     options.inSampleSize = 10;   //width,hight设为原来的十分一
     Bitmap btp =BitmapFactory.decodeStream(is,null,options);
2. if(!bmp.isRecycle() ){
         bmp.recycle()   //回收图片所占的内存
         system.gc()  //提醒系统及时回收
}

策略:
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,
因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,
decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,
无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应,
使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源,
否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。

分享到:
评论

相关推荐

    Android--从系统Camera和Gallery获取图片优化

    此外,使用`inPreferredConfig`指定色彩模式,如`ARGB_8888`是默认且占内存最多的,可以考虑降低为`RGB_565`节省内存。 当Bitmap不再使用时,必须正确释放资源,防止内存泄漏。Android提供了`recycle()`方法回收...

    Android内存缓存图片的标准方法

    通过将图片缓存在内存中,应用可以快速获取图片,而无需每次都从磁盘或网络重新加载。 2. **使用LruCache** - **创建LruCache实例**:首先,你需要创建一个`LruCache`实例。它的大小通常根据设备的可用内存进行...

    网上报名图片转换小内存版

    网上报名图片转换小内存版是一款专为网上报名过程设计的轻量级软件工具,它能够帮助用户高效地处理和转换上传所需的图片文件,以便在报名过程中满足格式和大小的要求。这款工具特别注重优化内存占用,确保在运行时...

    通过流获取图片

    这种技术广泛应用于网络服务、文件存储和数据传输等场景,尤其是在服务器端处理图片资源时,为了提高效率和节省内存,通常会采用流的方式。 在Java中,我们可以使用多种类库来实现这一功能,如标准的Java IO或者更...

    拍照、获取图片、转成字符串

    3. **图片尺寸调整**: 为了节省内存和适应显示需求,通常需要对原始图片进行尺寸调整。在示例代码中,`revitionImageSize`方法用于按比例缩小图片。它首先读取图片的原始尺寸,通过`inSampleSize`属性设置采样率,...

    android 获取网络图片

    为了节省内存,可以指定图片加载时的宽高比例,防止加载过大的图片。Glide和Picasso都提供了尺寸调整的选项。 6. **错误处理和占位符** 在图片加载失败或等待时,可以设置一个默认的占位符或错误图片,提高用户...

    android从网络,SD卡获取图片,压缩后显示到界面,可以保存到本地

    本文将深入探讨如何从网络、SD卡获取图片,如何压缩图片以适应界面显示,并将其保存到本地。这个过程涉及到多个技术点,包括网络请求、图片加载库的使用、图片压缩算法以及文件操作。 首先,从网络上获取图片通常...

    Android ListView从网络获取图片及文字显示

    通过以上步骤,你就可以实现一个从网络获取图片和文字并显示在ListView的完整功能。这个过程涉及到了网络请求、图片加载、Adapter自定义、性能优化等多个方面,对Android开发者的综合能力有较高的要求。在实际项目中...

    android图片与内存的关系

    例如,使用`android:background="@drawable/hdpi"`在XML布局文件中设置背景图片,或者通过`Resources.getDrawable(R.drawable.hdpi)`在代码中获取图片资源。这些方法最终都会转化为`Drawable`对象,而`Drawable`是一...

    使用 内存缓存与硬盘缓存异步下载图片

    在图片加载的例子中,每个单元格通常会包含一个ImageView,通过适配器获取图片数据并显示。 5. **缓存策略**: 在实际应用中,为了优化性能和资源利用,我们需要制定合理的缓存策略。例如,根据图片的大小、重要性...

    Android高级应用源码-从网络上获取图片.zip

    【标题】"Android高级应用源码-从网络上获取图片.zip"主要涵盖了Android应用程序开发中的一个关键知识点,即如何从互联网上下载并显示图片。在Android应用开发中,尤其是在社交媒体、新闻阅读或电商类应用中,从网络...

    android处理图片内存溢出VM.pdf

    具体实现时,通常先通过设置 inJustDecodeBounds 为 true 来获取图片尺寸信息,然后根据图片尺寸和期望的最大像素数计算出合适的 inSampleSize。最后,再次使用设置好了 inSampleSize 的 BitmapFactory.Options 实例...

    Android网络获取图片,显示在ViewPager上

    在这个场景下,我们需要从网络获取图片资源并将其显示在ViewPager上,这涉及到Android的网络编程、图片加载库以及适配器机制等多个知识点。 1. **网络编程**: Android的网络访问主要通过`HttpURLConnection`或第三...

    应用源码之从网络上获取图片.zip

    8. **图片质量与尺寸调整**:为了节省内存,我们通常根据ImageView的大小动态调整图片的解码尺寸。源码可能会演示如何计算合适的尺寸并避免加载过大图片导致的内存溢出。 9. **下载进度显示**:为了提升用户体验,...

    listview获取网络图片缓存优化

    "listview获取网络图片缓存优化" 主要关注如何在ListView中高效地加载和缓存网络图片,以提升用户体验。 首先,我们需要理解ListView的工作原理。ListView通过复用ViewHolder中的视图来提高滚动性能。当一个item...

    android本地图片获取

    整个项目的讲解博文:http://blog.csdn.net/u010156024/article/details/44120595 使用Gridview加载图片显示。获取图片部分使用异步加载技术同时以最大限度节省内存空间,更加流畅。

    SDWebImage内存警告修复版

    7. **使用更节省内存的数据格式**:例如,将图片数据存储为JPEG或WebP格式,这些格式比PNG在内存占用上更优。 通过以上策略的实施,修复版SDWebImage可以更好地管理内存,避免因加载大图片引发的内存警告,提高应用...

    Android远程图片获取和本地缓存

    为了解决这个问题,开发者通常采用异步下载的方式来获取远程图片资源。 异步下载是解决UI阻塞的关键,它将图片下载任务放到后台线程执行,不影响主线程的正常运行。在Android中,有两种常见的实现方式: 1. **新...

    Android从服务器获取图片的实例方法

    注意,处理大图片时,为了节省内存,可能需要考虑使用`inSampleSize`参数进行采样。 最后,获取到Bitmap后,我们可以将其设置到ImageView上展示。使用`imageView.setImageBitmap(bitmap)`将Bitmap对象绑定到...

Global site tag (gtag.js) - Google Analytics