《Android Reference 翻译》 - Media - Image

继承关系
java.lang.Object
   ?        android.media.Image

类概述
它是一个单一完整的图像Buffer,与常见的Media Source(如MediaCodec)搭配使用。

这个类允许应用程序通过一个或多个ByteBuffer对图像的像素数据进行高效直接地访问。每个ByteBuffer被封装在一个Image.Plane中,Image.Plane描述了像素数据在Plane中是如何布局的,因为这种ByteBuffer是直接访问获取的,不同于Bitmap,所以不能直接用于UI资源中。

因为Image通常是被硬件组件直接产生或消耗的,他们是有限资源且被整个系统共享,所以当不需要Image时应该立即关闭。
例如,当使用ImageReader从各种Media Source中读取Image时,如果旧有的Image对象未被关闭,有可能会阻止本次Image的读取(一旦未关闭的Image数到达最大值时,就无法读取新的Image)。当这种情况发生时,去读取新的Image会抛出IllegalStateException异常。


总览
内部类
class Image.Plane   图像数据的单一颜色Plane

公开方法

abstract void close()  Free up this frame for reuse.  释放此帧Image以便重复使用
abstract int getFormat()  Get the format for this image. 获取Image的格式
abstract int getHeight()  The height of the image in pixels. 以像素为单位的图像高度
abstract Plane[] getPlanes()  Get the array of pixel planes for this Image.  获取该Image中包含的像素Plane数组
abstract long getTimestamp()  Get the timestamp associated with this frame.  获取此帧Image的时间戳
abstract int getWidth()  The width of the image in pixels.  以像素为单位的图像宽度

公开方法
public abstract void close ()
释放此帧Image以便重复使用
当调用这个方法之后,任何对该Image对象的操作都会导致IllegalStateException异常,并且尝试去读取之前通过Image.plane.getBuffer()拿到的ByteBuffer对象中的数据时也会发生不预期的行为。
public abstract int getFormat ()
获取Image的格式
这种格式决定了代表图像所需要的ByteBuffer数量,以及每个像素数据在每个ByteBuffer中的总体布局。

这种格式是ImageFormat中的某一个,图像格式与Plane的映射关系如下:

格式 Plane数量 布局细节
JPEG 1 压缩数据,因此行和列的stride均为0,如果想要解压的话,请使用BitmapFactory#decodeByteArray.
YUV_420_888 3 一个亮度Plane,接着是Cb和Cr两个色度Plane,色度Plane的宽高是亮度平面宽高的一半(4:2:0采样),在每个Plane中每个像素样本具有8位,每个Plane都有自己的行和列stride.



public abstract int getHeight ()
以像素为单位的图像高度,对于一些颜色通道是子采样的格式而言,这是最大分辨率Plane的高度

public abstract Plane[] getPlanes ()
获取该Image中包含的像素Plane的数组,Plane的数量是由Image的格式决定的

public abstract long getTimestamp ()
获取此帧Image的时间戳,时间戳的单位是纳秒并且单调递增。但是,零点和是否这个Image的时间戳能与其它时间源或者其它Image的时间戳比较,这取决于该Image的来源。
public abstract int getWidth ()
以像素为单位的图像宽度,对于一些颜色通道是子采样的格式而言,这是最大分辨率Plane的宽度

转文章请标明出处:http://www.eyeandroid.com/thread-5905-1-1.html

《Android Reference 翻译》 - Media - Image,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。