Android的图像处理

多媒体处理

 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算法保存最近常使用的图片,淘汰不常使用的图像。

猜你喜欢

转载自aoyouzi.iteye.com/blog/1996563