Android的图像处理
多媒体处理
Android的图像处理
图像的表示
在Android中,存在内存中的图像数据通过Bitmap对象表示。Bitmap实现了Parcelable接口,说明图像数据是可以序列化和反序列化。
Bitmap可以存储各种格式的图像数据,如alpha8 agrb4444 agrb8888 rgb555等。Bitmap占据较多的内存,须严格控制Bitmap的生命周期。一旦Bitmap使用完毕,应及时调用Bitmap.recycle回收。
Bitmap底层实现依托于开源库Skia,Bitmap通过底层JNI调用Skia的Bitmap实现。
在Android中,最有特色的Bitmap格式是,九宫格Nine Patch图像。分成9块区域,利用图像最边缘的1像素的矩形框来划分区域信息,通过矩形框的黑白变化勾勒出九宫格的9块区域。
图像的读取和输出
在Android中,图像的读取通过BitmapFactory实现。使用BitmapFactory可以从不同的数据源读取数据,如从图片文件中:
BitmapFactory.decodeFile(“路径”)
从资源文件中读取:BitmapFactory.decodeResource(R.drawable.X)
但图片过大会导致内存溢出。
读取大图片时,需要控制读入图片的大小,使用BitmapFactory.options设置读取图片的参数,options类中,in开头的参数表示控制图像读取的参数,inSampleSize可以控制图像的缩放比例。out开头的参数表示用来预取该图片文件中图像的基本信息,如长宽、图片的类型等。
为了区分BitmapFactory.decodeFile是为了获取图片信息而不是读取图片数据,用options对象中的inJustDecodeBounds=true实现。
通过Bitmap.compress可以将存放在内存中的图像数据压缩成PGN、GIF、JPG等格式。
图像的呈现
使用ImageView控件。其实现很简单,将图像数据读到内存中,按照一定比例展示出来,因此无法满足:
大尺寸照片的呈现:不支持缩放、拖动
大图片文件的呈现:可能内存溢出
存储在Web上的图片的呈现:不支持网络获取图片
综述:ImageView适合简单的小图像的呈现。
图像管理
开发中如果需要处理大量小图片(头像、缩略图),那么将图片对象池化进行管理。如联系人应用。
联系人应用用LruCache来存储联系人头像信息。LruCache基于最近最少使用LRU算法保存最近常使用的图片,淘汰不常使用的图像。
更多相关文章
- android网络优化
- android:scaleType属性
- 关于ImageView的一些图片属性
- android中加载大图片到内存
- 详解android:scaleType属性
- 互联网公司Android客户端面试 知识点
- Android响应式UI教程
- android 网络访问-图片处理优秀开源项目 (201
- Android(安卓)Fresco图片处理库用法API英文原文文档2-2(Facebook