高效显示Bitmap

这一章节会介绍一些处理与加载Bitmap对象的常用方法,这些技术能够使得程序的UI不会被阻塞,并且可以避免程序超出内存限制。如果我们不注意这些,Bitmaps会迅速的消耗掉可用内存从而导致程序崩溃,出现下面的异常:java.lang.OutofMemoryError: bitmap size exceeds VM budget.

在Android应用中加载Bitmaps的操作是需要特别小心处理的,有下面几个方面的原因:

  • 移动设备的系统资源有限。Android设备对于单个程序至少需要16MB的内存。Android Compatibility Definition Document (CDD), Section 3.7. Virtual Machine Compatibility 中给出了对于不同大小与密度的屏幕的最低内存需求。 应用应该在这个最低内存限制下去优化程序的效率。当然,大多数设备的都有更高的限制需求。
  • Bitmap会消耗很多内存,特别是对于类似照片等内容更加丰富的图片。 例如,Galaxy Nexus的照相机能够拍摄2592x1936 pixels (5 MB)的图片。 如果bitmap的图像配置是使用ARGB_8888 (从Android 2.3开始的默认配置) ,那么加载这张照片到内存大约需要19MB(2592*1936*4 bytes) 的空间,从而迅速消耗掉该应用的剩余内存空间。
  • Android应用的UI通常会在一次操作中立即加载许多张bitmaps。 例如在ListView, GridViewViewPager 等控件中通常会需要一次加载许多张bitmaps,而且需要预先加载一些没有在屏幕上显示的内容,为用户滑动的显示做准备。
时间: 2024-10-25 14:38:53

高效显示Bitmap的相关文章

Android bitmap高效显示和优化

第一部分:Bitmap高效显示 应用场景:有时候我们想在界面上显示一个网络图片或者显示一张本地的图片,但是图片本身是很大的有几兆,但是显示的位置很小或者说我们可以用更小的图片来满足这样的需求,如果把整个图片都显示出来会非常的耗内存,甚至可以导致内存溢出,这就需要我们来处理,如何高效的显示图片,减少内存消耗. 1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 3 options.inJustDecodeBounds =

android 在HTML中显示bitmap

逻辑:将bitmap转化为Base64,通过调用HTML中的JS,显示到HTML中 (1)android代码 public String bitmaptoString(Bitmap bitmap) { // 将Bitmap转换成Base64字符串 StringBuffer string = new StringBuffer(); ByteArrayOutputStream bStream = new ByteArrayOutputStream(); try { bitmap.compress(C

按比例缩放显示bitmap

BitmapFactory.Options factoryOptions = new BitmapFactory.Options(); // 不将图片读取到内存中,仍然可以通过参数获得它的高宽 factoryOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, factoryOptions); int imageWidth = factoryOptions.outWidth; int imageHeight = fac

【Android开发经验】Bitmap高效显示系列——如何有效的加载大尺寸Bitmap

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Bitmap的处理在Android开发中一直是一个大问题,因为稍不注意,Bitmap就能够吃掉我们的所有内存,然后崩溃退出!但是,只要我们掌握了Bitmap的一些常见处理技巧,就可以有效的避免这个问题,从此不再惧怕Bitmap. 图片有不同的形状与大小.在大多数情况下它们的实际大小都比需要呈现出来的要大很多.例如,系统的Gallery程序会显示那些你使用设备camera拍摄的图片,但是那些图片的分辨率通常

在UI上显示Bitmap

这一课会演示如何运用前面几节课的内容,使用后台线程与Cache机制来加载图片到 ViewPager 与 GridView 组件,并且学习处理并发与配置改变问题. 实现加载图片到ViewPager(Load Bitmaps into a ViewPager Implementation) swipe view pattern是一个用来切换显示不同详情界面的很好的方法.(关于这种效果请先参看Android Design: Swipe Views). 你可以通过 PagerAdapter 与 View

Android学习笔记:如何高效显示图片,避免内存溢出 和 ImageView无法显示大尺寸的图片

因为手机的内存资源是有限的,每个app可使用的内存是受限的.而现在采用高分辨率拍的照片往往很大.如果加载时不注意方法,很有可能会引起java.lang.OutofMemoryError: bitmap size exceeds VM budget. 异常而导致app奔溃退出. 另外ImageView支持的图片大小也是受限制的,比如整个App虽然只放一张图片,该图片大小也没超过整个app的内存上限.但该图片大小超过了ImageView的最大值,这也是有问题的.这时需要采取方法,在加载图片时缩小加载

Android官方开发文档Training系列课程中文版:高效显示位图之位图缓存

原文地址:http://android.xsoftlab.net/training/displaying-bitmaps/cache-bitmap.html 往UI界面中加载单张图片的过程是很简单的,然而如果需要在某个时刻同时加载大量的图片,那么这事情就有些复杂了.在很多情况下,比如使用了ListView.GridView或者是ViewPager来展示一定数量的图片,在本质上这些情况下,屏幕的快速滑动会导致大量的图片被集中展示在屏幕上. 类似这样通过回收移除到屏幕之外的子View的组件会抑制内存

EmguCV(OpenCV)实现高效显示汉字及叠加

视频处理中,往往需要在上面增加文字包括汉字英文字母数字标点等,Emgu.CV/opencv 绘图 线面文字包括中文 这篇里也有相关介绍,但是这篇里根据逐像素修改rgb值的方法效率太低 查了很多资料,基本上opencv叠加汉字的方法都起源于这里 http://wenku.baidu.com/link?url=g1dCXwRbSpy7XUhsStRLANQRmvAXKSAa1ohrphx1R3XSZozi68WrTOrKjbxRnh9jWvF9Ass2SZKnvFrGE2ctCpZadNndhFrQ

Android用simpleAdapter来直接显示bitmap图片

一般来说,在用simpleAdapter适配器时,我们所要显示的图片资源都是程序内的本地资源,而且是以资源的ID(Resources ID)形式来表现的. map.put("img", R.drawable.i3); 但是有时候我们需要用这个适配器来显示网上的远程图片时,该如何直接显示呢?方法是实现ViewBinder()这个接口,在里面定义数据和视图的匹配关系 adapter=new SimpleAdapter(this, data,// 数据源 R.layout.activity_