多媒体处理

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网络优化
  2. android:scaleType属性
  3. 关于ImageView的一些图片属性
  4. android中加载大图片到内存
  5. 详解android:scaleType属性
  6. 互联网公司Android客户端面试 知识点
  7. Android响应式UI教程
  8. android 网络访问-图片处理优秀开源项目 (201
  9. Android(安卓)Fresco图片处理库用法API英文原文文档2-2(Facebook

随机推荐

  1. Android碎知识点以及正则表达式
  2. Android(安卓)开发之 ClipboardManager
  3. android Service深入详解
  4. Android(安卓)TextView自适应文字大小
  5. AttachCurrentThread报错
  6. 如何编译Android的kernel
  7. Android(安卓)ListView分页加载数据Demo
  8. Java 回顾笔记 1
  9. android APK签名过程之MANIFEST.MF分析
  10. Android(安卓)单例模式与SharedPreferenc