public abstract class Image
extends Object
implements AutoCloseable
java.lang.Object | |
↳ | android.media.Image |
与媒体源一起使用的单个完整图像缓冲区,例如 MediaCodec
或 CameraDevice
。
该类允许通过一个或多个ByteBuffers
高效地直接应用程序访问图像的像素数据。 每个缓冲区都封装在描述该平面中像素数据布局的Image.Plane
中。 由于这种直接访问方式,与Bitmap
类不同,图像不能直接用作UI资源。
由于图像通常由硬件组件直接生成或使用,因此它们是整个系统共享的有限资源,应在不再需要时立即关闭。
例如,当使用ImageReader
类从各种媒体源读出图像时,一旦达到the maximum outstanding image count
,不关闭旧的图像对象将阻止新图像的可用性。 发生这种情况时,获取新图像的函数通常会抛出IllegalStateException
。
也可以看看:
Nested classes |
|
---|---|
class |
Image.Plane
图像数据的单色平面。 |
Public methods |
|
---|---|
abstract void |
close() 释放此框架以供重用。 |
Rect |
getCropRect() 获取与此框架关联的裁剪矩形。 |
abstract int |
getFormat() 获取此图片的格式。 |
abstract int |
getHeight() 图像的高度(以像素为单位)。 |
abstract Plane[] |
getPlanes() 获取该图像的像素平面阵列。 |
abstract long |
getTimestamp() 获取与此帧关联的时间戳。 |
abstract int |
getWidth() 图像的宽度(以像素为单位)。 |
void |
setCropRect(Rect cropRect) 设置与此帧关联的裁剪矩形。 |
void |
setTimestamp(long timestamp) 设置与此帧关联的时间戳。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.lang.AutoCloseable
|
void close ()
释放此框架以供重用。
调用此方法后,调用此方法Image
上的任何方法都会导致IllegalStateException
,并尝试从getBuffer()
调用中返回的ByteBuffers
读取或写入到ByteBuffers
会产生未定义的行为。 如果图像是通过dequeueInputImage()
从ImageWriter
获得的,则在调用此方法后,应用程序填充的任何图像数据将丢失,图像将返回到ImageWriter
以供重用。 提供给queueInputImage()
图像会自动关闭。
Rect getCropRect ()
获取与此框架关联的裁剪矩形。
裁剪矩形使用最大分辨率平面中的坐标指定图像中有效像素的区域。
Returns | |
---|---|
Rect |
int getFormat ()
获取此图片的格式。 此格式决定了表示图像所需的ByteBuffers的数量以及ByteBuffer中每个像素数据的总体布局。
格式是ImageFormat
一个值。 格式和平面之间的映射如下所示:
Format | Plane count | Layout details |
---|---|---|
JPEG |
1 | Compressed data, so row and pixel strides are 0. To uncompress, use BitmapFactory#decodeByteArray . |
YUV_420_888 |
3 | A luminance plane followed by the Cb and Cr chroma planes. The chroma planes have half the width and height of the luminance plane (4:2:0 subsampling). Each pixel sample in each plane has 8 bits. Each plane has its own row stride and pixel stride. |
YUV_422_888 |
3 | A luminance plane followed by the Cb and Cr chroma planes. The chroma planes have half the width and the full height of the luminance plane (4:2:2 subsampling). Each pixel sample in each plane has 8 bits. Each plane has its own row stride and pixel stride. |
YUV_444_888 |
3 | A luminance plane followed by the Cb and Cr chroma planes. The chroma planes have the same width and height as that of the luminance plane (4:4:4 subsampling). Each pixel sample in each plane has 8 bits. Each plane has its own row stride and pixel stride. |
FLEX_RGB_888 |
3 | A R (red) plane followed by the G (green) and B (blue) planes. All planes have the same widths and heights. Each pixel sample in each plane has 8 bits. Each plane has its own row stride and pixel stride. |
FLEX_RGBA_8888 |
4 | A R (red) plane followed by the G (green), B (blue), and A (alpha) planes. All planes have the same widths and heights. Each pixel sample in each plane has 8 bits. Each plane has its own row stride and pixel stride. |
RAW_SENSOR |
1 | A single plane of raw sensor image data, with 16 bits per color sample. The details of the layout need to be queried from the source of the raw sensor data, such as CameraDevice . |
RAW_PRIVATE |
1 | A single plane of raw sensor image data of private layout. The details of the layout is implementation specific. Row stride and pixel stride are undefined for this format. Calling getRowStride() or getPixelStride() on RAW_PRIVATE image will cause UnSupportedOperationException being thrown. |
Returns | |
---|---|
int |
也可以看看:
int getHeight ()
图像的高度(以像素为单位)。 对于某些颜色通道进行二次采样的格式,这是最大分辨率平面的高度。
Returns | |
---|---|
int |
Plane[] getPlanes ()
获取该图像的像素平面阵列。 平面的数量由图像的格式决定。 如果图像格式为PRIVATE
,应用程序将获得一个空数组,因为图像像素数据不可直接访问。 应用程序可以通过调用getFormat()
来检查图像格式。
Returns | |
---|---|
Plane[] |
long getTimestamp ()
获取与此帧关联的时间戳。
时间戳以纳秒为单位进行测量,并且通常单调递增。 来自不同来源的图像的时间戳可能具有不同的时间基准,因此可能无法比较。 时间戳的具体含义和时间基础取决于提供图像的来源。 见Camera
, CameraDevice
, MediaPlayer
和MediaCodec
的更多细节。
Returns | |
---|---|
long |
int getWidth ()
图像的宽度(以像素为单位)。 对于某些颜色通道进行二次抽样的格式,这是最大分辨率平面的宽度。
Returns | |
---|---|
int |
void setCropRect (Rect cropRect)
设置与此帧关联的裁剪矩形。
裁剪矩形使用最大分辨率平面中的坐标指定图像中有效像素的区域。
Parameters | |
---|---|
cropRect |
Rect
|
void setTimestamp (long timestamp)
设置与此帧关联的时间戳。
时间戳以纳秒为单位进行测量,并且通常单调递增。 来自不同来源的图像的时间戳可能具有不同的时间基准,因此可能无法比较。 时间戳的具体含义和时间基础取决于提供图像的来源。 见Camera
, CameraDevice
, MediaPlayer
和MediaCodec
的更多细节。
对于通过 dequeueInputImage()
从 ImageWriter
出 ImageWriter
图像,在将应用程序发送回 ImageWriter
之前正确设置时间戳,或者在调用 queueInputImage()
时自动生成时间戳。
Parameters | |
---|---|
timestamp |
long : The timestamp to be set for this image. |