1.2.5 图形和多媒体处理
对于现今的移动设备而言,声、色、型都是必不可少的组成部分。Android支持MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等主流的图像和音视频格式[1]。Android的音视频处理主要依托于开源的OpenCORE项目,这是一个基于C/C++实现的音视频处理库,放在Android的核心类库层,可以进行多种格式文件的编解码及流媒体处理。在图像处理方面,主要是通过开源项目Skia[2]来支持,它可以帮助读写图像数据,进行位图到PNG、JPG格式图像的编解码。不过,在Android中处理大尺寸的图像数据需要非常小心谨慎,因为它往往需要将图像数据加载到内存中来,而每个Android进程仅有16MB的堆空间,一不小心内存溢出了,整个应用不可避免就会崩溃。
Android中对2D图形的使用,主要经由android.graphics.drawable包来实现。该包中的类都是android.graphics.drawable.Drawable基类的具体实现,在实际工程中碰到的大部分2D图形、图像及动画的呈现,几乎都可以通过它们来实现。它不仅支持图形、图像、纯色、渐变等静态效果的绘制,还可以分层、分状态地显示各种动画效果;并且,它支持局部或全局的缩放、拉伸和旋转等操作,从而帮助开发者轻松搭建秀色可餐的应用。
在3D处理方面,Android则搭配了OpenGL ES(OpenGL for Embedded System)[3]。开发者可以通过javax.microedition.khronos.opengles包和android.opengl包,来使用OpenGL进行开发。而对于很多游戏开发者而言,为了追求更高的效率,可以抛开Java的封装,直接通过Android NDK提供的OpenGL ES接口来进行开发。本书并不会详细介绍图形处理方面的知识,对于大多数图形处理的开发者而言,图形学知识和OpenGL的使用才是重点,具体的开发平台并不会成为他们的桎梏。
对于所有多媒体数据的操作,内存开销永远是非常重要的话题。如何在降低内存消耗的前提下,更流畅地处理多媒体数据,本书第12章将会详细讲解。
[1]Android支持的格式参见:http://developer.android.com/guide/appendix/media-formats.html。
[2]Skia的官方网站:http://code.google.com/p/skia/。
[3]关于OpenGL ES的介绍,请参见:http://www.khronos.org/opengles/。