阅读更多

多媒体处理

 Android的图像处理

图像的表示

Android中,存在内存中的图像数据通过Bitmap对象表示。Bitmap实现了Parcelable接口,说明图像数据是可以序列化和反序列化。

   Bitmap可以存储各种格式的图像数据,如alpha8  agrb4444 agrb8888   rgb555等。Bitmap占据较多的内存,须严格控制Bitmap的生命周期。一旦Bitmap使用完毕,应及时调用Bitmap.recycle回收。

    Bitmap底层实现依托于开源库SkiaBitmap通过底层JNI调用SkiaBitmap实现。

 

   Android中,最有特色的Bitmap格式是,九宫格Nine Patch图像。分成9块区域,利用图像最边缘的1像素的矩形框来划分区域信息,通过矩形框的黑白变化勾勒出九宫格的9块区域。

图像的读取和输出

Android中,图像的读取通过BitmapFactory实现。使用BitmapFactory可以从不同的数据源读取数据,如从图片文件中:

BitmapFactory.decodeFile(“路径”)

从资源文件中读取:BitmapFactory.decodeResourceR.drawable.X

但图片过大会导致内存溢出。

 

读取大图片时,需要控制读入图片的大小,使用BitmapFactory.options设置读取图片的参数,options类中,in开头的参数表示控制图像读取的参数,inSampleSize可以控制图像的缩放比例。out开头的参数表示用来预取该图片文件中图像的基本信息,如长宽、图片的类型等。

 

为了区分BitmapFactory.decodeFile是为了获取图片信息而不是读取图片数据,用options对象中的inJustDecodeBounds=true实现。

 

通过Bitmap.compress可以将存放在内存中的图像数据压缩成PGNGIFJPG等格式。

 

图像的呈现

使用ImageView控件。其实现很简单,将图像数据读到内存中,按照一定比例展示出来,因此无法满足:

大尺寸照片的呈现:不支持缩放、拖动

大图片文件的呈现:可能内存溢出

存储在Web上的图片的呈现:不支持网络获取图片

综述:ImageView适合简单的小图像的呈现。

 

图像管理

开发中如果需要处理大量小图片(头像、缩略图),那么将图片对象池化进行管理。如联系人应用。

 

联系人应用用LruCache来存储联系人头像信息。LruCache基于最近最少使用LRU算法保存最近常使用的图片,淘汰不常使用的图像。

更多相关文章

  1. 详解android:scaleType属性
  2. 关于android读取用户号码,手机串号,SIM卡序列号
  3. android 的短信数据库的读取
  4. Android(安卓)上传头像(文件)到服务器
  5. Android(安卓)Handler 异步消息处理机制的妙用 创建强大的图片加
  6. 浅谈android的selector背景选择器
  7. Android的图像处理
  8. 浅谈android的selector,背景选择器
  9. Android开机动画过程

随机推荐

  1. Unity 接入 Facebook登录SDK7.11.1 (Andr
  2. 浅谈android中的异步加载一
  3. Android核心分析 --分析方法论探讨之设计
  4. 物联网江湖 第二回- 列王的纷争 谷歌的利
  5. 最新android studio注意事项打不开等问题
  6. android.webkit.WebView 体验1: 使用html
  7. VisionMobile:移动平台生态系统冲突报告(
  8. Android(安卓)Fragment完全解析,关于碎片
  9. 第24章、OnLongClickListener长按事件(从
  10. Android软键盘弹起遮挡h5页面解决方法