《Android Reference 翻译》 - Media - Image

本文深入探讨了Android平台上的图像处理技术,包括Media模块的使用,重点讲解了Image类的功能和应用,涵盖加载、显示、编辑和保存图像的各种方法。通过实例解析,展示了如何在Android应用中高效地操作和管理图片资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承关系
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数量布局细节
JPEG1压缩数据,因此行和列的stride均为0,如果想要解压的话,请使用BitmapFactory#decodeByteArray.
YUV_420_8883一个亮度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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值