public class ImageFormat
extends Object
java.lang.Object | |
↳ | android.graphics.ImageFormat |
Constants |
|
---|---|
int |
DEPTH16 Android密集深度图像格式。 |
int |
DEPTH_POINT_CLOUD Android稀疏深度点云格式。 |
int |
FLEX_RGBA_8888 多平面Android RGBA格式 这种格式是通用的RGBA格式,能够描述大多数RGBA格式,每种颜色样本8位。 |
int |
FLEX_RGB_888 多平面Android RGB格式 这种格式是一种通用的RGB格式,能够描述大多数RGB格式,每种颜色样本8位。 |
int |
JPEG 压缩的JPEG格式。 |
int |
NV16 YCbCr格式,用于视频。 |
int |
NV21 用于图像的YCrCb格式,使用NV21编码格式。 |
int |
PRIVATE Android专用的不透明图像格式。 |
int |
RAW10 Android 10位原始格式 这是一个单平面,每像素10位,密集包装(每行),未处理的格式,通常表示来自图像传感器的原始拜耳模式图像。 |
int |
RAW12 Android 12位原始格式 这是一个单平面,每像素12位,密集排列(每行),未处理的格式,通常表示来自图像传感器的原始拜耳模式图像。 |
int |
RAW_PRIVATE 私有原始相机传感器图像格式,实现独立像素布局的单通道图像。 |
int |
RAW_SENSOR 一般原始相机传感器图像格式,通常代表单通道拜耳马赛克图像。 |
int |
RGB_565 RGB格式用于编码为RGB_565的图片。 |
int |
UNKNOWN |
int |
YUV_420_888 多平面Android YUV 420格式 这种格式是一种通用的YCbCr格式,能够描述任何4:2:0色度二次采样平面或半平面缓冲区(但不是完全交错的),每个颜色采样8位。 |
int |
YUV_422_888 多平面Android YUV 422格式 这种格式是通用的YCbCr格式,能够描述任何4:2:2色度二次采样(平面,半平面或交错)格式,每种颜色样本8位。 |
int |
YUV_444_888 多平面Android YUV 444格式 这种格式是通用的YCbCr格式,能够描述任何4:4:4(平面,半平面或交错)格式,每种颜色样本8位。 |
int |
YUY2 用于图像的YCbCr格式,使用YUYV(YUY2)编码格式。 |
int |
YV12 Android YUV格式。 |
Public constructors |
|
---|---|
ImageFormat() |
Public methods |
|
---|---|
static int |
getBitsPerPixel(int format) 使用此函数可检索ImageFormat的每个像素的位数。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int DEPTH16
Android密集深度图像格式。
每个像素是16位,代表来自深度相机或类似传感器的深度测量。 16位采样由置信度值和实际测距测量组成。
置信度值是该样本正确性的估计值。 它被编码在样本的3个最高有效位中,其值为0表示100%置信度,值1表示0%置信度,值2表示1/7,值3表示2/7,等等。
作为示例,下面的示例从DEPTH16格式的第一个像素Image中提取范围和置信 Image
,并将置信度转换为介于0和1.f之间的浮点值,其中1.f表示最大置信度:
ShortBuffer shortDepthBuffer = img.getPlanes()[0].getBuffer().asShortBuffer(); short depthSample = shortDepthBuffer.get() short depthRange = (short) (depthSample & 0x1FFF); short depthConfidence = (short) ((depthSample >> 13) & 0x7); float depthPercentage = depthConfidence == 0 ? 1.f : (depthConfidence - 1) / 7.f;
This format assumes
y_size = stride * heightWhen produced by a camera, the units for the range are millimeters.
常量值:1144402265(0x44363159)
int DEPTH_POINT_CLOUD
Android稀疏深度点云格式。
3D点的可变长度列表加上置信度值,每个点由四个浮点数表示; 首先是X,Y,Z位置坐标,然后是置信度值。
点数是 (size of the buffer in bytes) / 16
。
位置值的坐标系和单位取决于点云数据的来源。 置信度值介于0.f和1.f之间(含),0代表0%置信度,1.f代表测量位置值的100%置信度。
作为示例,以下代码以DEPTH_POINT_CLOUD格式 Image
提取第一个深度点:
FloatBuffer floatDepthBuffer = img.getPlanes()[0].getBuffer().asFloatBuffer(); float x = floatDepthBuffer.get(); float y = floatDepthBuffer.get(); float z = floatDepthBuffer.get(); float confidence = floatDepthBuffer.get();
常量值:257(0x00000101)
int FLEX_RGBA_8888
多平面Android RGBA格式
这种格式是通用的RGBA格式,能够描述大多数RGBA格式,每种颜色样本8位。
这种格式的图像总是由四个独立的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。
保证Image#getPlanes()
返回数组中的平面的顺序,使得#0平面始终为R(红色),#1平面始终为G(绿色),#2平面始终为B(蓝色),并且平面#3始终为一个(阿尔法)。 这种格式可能表示预乘或未预乘alpha。
所有四个平面保证具有相同的行跨度和像素跨度。
例如, Image
对象可以从 MediaCodec
到 getOutputImage(int)
对象提供此格式的数据。
也可以看看:
常量值:42(0x0000002a)
int FLEX_RGB_888
多平面Android RGB格式
这种格式是一种通用的RGB格式,能够描述大多数RGB格式,每种颜色样本8位。
这种格式的图像总是由三个单独的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。
数组 Image#getPlanes()
返回的数组中的平面的顺序被保证为使得#0平面总是R(红色),#1平面总是G(绿色),并且平面#2总是B(蓝色)。
所有三个平面都保证具有相同的行跨度和像素跨度。
例如, Image
对象可以从 MediaCodec
到 getOutputImage(int)
对象提供此格式的数据。
也可以看看:
常量值:41(0x00000029)
int JPEG
压缩的JPEG格式。
此格式始终作为 android.hardware.camera2
API的输出格式支持,并作为旧版 Camera
API的图片格式
常量值:256(0x00000100)
int NV16
YCbCr格式,用于视频。
对于 android.hardware.camera2
API,建议使用 YUV_420_888
格式替代YUV输出。
这种格式是否由旧相机API支持可由 getSupportedPreviewFormats()
确定。
常量值:16(0x00000010)
int NV21
用于图像的YCrCb格式,使用NV21编码格式。
这是 Camera
预览图像的默认格式,当未另行使用 setPreviewFormat(int)
设置时。
对于 android.hardware.camera2
API,建议使用 YUV_420_888
格式替代YUV输出。
常量值:17(0x00000011)
int PRIVATE
Android专用的不透明图像格式。
实际格式和像素数据布局的选择完全取决于设备特定的和框架内部的实现,并且可能根据使用情况而变化,即使对于相同的设备也是如此。 这种格式的缓冲区可以由像ImageWriter
这样的组件ImageWriter
,并由消费者根据设备/框架私有信息正确解释,如CameraDevice
。 但是,这些缓冲区不能直接被应用程序访问。
当 Image
这种格式是从得到 ImageReader
或 ImageWriter
,所述 getPlanes()
方法将返回一个空 Plane
阵列。
如果将这种格式的缓冲区用作OpenGL ES纹理,则框架将假定抽样纹理将始终返回1.0的Alpha值(即,缓冲区仅包含不透明的像素值)。
常量值:34(0x00000022)
int RAW10
Android 10位原始格式
这是一个单平面,每像素10位,密集包装(每行),未处理的格式,通常表示来自图像传感器的原始拜耳模式图像。
在具有这种格式的图像缓冲器中,从每行的第一个像素开始,每4个连续的像素被打包成5个字节(40位)。 前4个字节中的每一个包含每个像素的前8位,第5个字节包含4个像素中的2个最不重要的位,每个4个连续像素的确切布局数据如下所示( Pi[j]
代表第第i个像素):
bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | |
---|---|---|---|---|---|---|---|---|
Byte 0: | P0[9] | P0[8] | P0[7] | P0[6] | P0[5] | P0[4] | P0[3] | P0[2] |
Byte 1: | P1[9] | P1[8] | P1[7] | P1[6] | P1[5] | P1[4] | P1[3] | P1[2] |
Byte 2: | P2[9] | P2[8] | P2[7] | P2[6] | P2[5] | P2[4] | P2[3] | P2[2] |
Byte 3: | P3[9] | P3[8] | P3[7] | P3[6] | P3[5] | P3[4] | P3[3] | P3[2] |
Byte 4: | P3[1] | P3[0] | P2[1] | P2[0] | P1[1] | P1[0] | P0[1] | P0[0] |
这种格式假定
size = row stride * heightwhere the row stride is in bytes, not pixels.
由于这是一种紧凑的格式,像素跨度始终为0.应用程序必须使用上表中定义的像素数据布局来访问每行数据。 当行跨度等于width * (10 / 8)
时,每行末尾将不会有填充字节,整个图像数据将被密集打包。 当步幅大于width * (10 / 8)
,填充字节将出现在每行的末尾。
例如, Image
对象可以从CameraDevice
(如果支持)通过ImageReader
对象提供此格式的数据。 Image#getPlanes()
将返回包含像素数据的单个平面。 getPixelStride()
的像素步长总是0,并且getRowStride()
描述了相邻行之间的垂直相邻像素距离(以字节为单位)。
也可以看看:
常量值:37(0x00000025)
int RAW12
Android 12位原始格式
这是一个单平面,每像素12位,密集排列(每行),未处理的格式,通常表示来自图像传感器的原始拜耳模式图像。
在具有这种格式的图像缓冲器中,从每行的第一个像素开始,每两个连续的像素被打包成3个字节(24位)。 第一个和第二个字节包含第一个和第二个像素的前8位。 第三个字节包含两个像素的4个最低有效位,下面说明了每两个连续像素的确切布局数据(Pi [j]代表第i个像素的第j位):
bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | |
---|---|---|---|---|---|---|---|---|
Byte 0: | P0[11] | P0[10] | P0[ 9] | P0[ 8] | P0[ 7] | P0[ 6] | P0[ 5] | P0[ 4] |
Byte 1: | P1[11] | P1[10] | P1[ 9] | P1[ 8] | P1[ 7] | P1[ 6] | P1[ 5] | P1[ 4] |
Byte 2: | P1[ 3] | P1[ 2] | P1[ 1] | P1[ 0] | P0[ 3] | P0[ 2] | P0[ 1] | P0[ 0] |
这种格式假定
size = row stride * heightwhere the row stride is in bytes, not pixels.
由于这是一种紧凑的格式,像素跨度始终为0.应用程序必须使用上表中定义的像素数据布局来访问每行数据。 当行跨度等于width * (12 / 8)
时,每行末尾将不会有填充字节,整个图像数据将被密集打包。 当步幅大于width * (12 / 8)
,填充字节将出现在每行的末尾。
例如, Image
对象可以从CameraDevice
(如果支持)通过ImageReader
对象提供此格式的数据。 Image#getPlanes()
将返回包含像素数据的单个平面。 getPixelStride()
的像素步长总是0,而getRowStride()
描述相邻行之间的垂直相邻像素距离(以字节为单位)。
也可以看看:
常量值:38(0x00000026)
int RAW_PRIVATE
私有原始相机传感器图像格式,实现独立像素布局的单通道图像。
RAW_PRIVATE是来自图像传感器的未处理原始图像缓冲区的格式。 这种格式的缓冲区的实际结构取决于实现。
常量值:36(0x00000024)
int RAW_SENSOR
一般原始相机传感器图像格式,通常代表单通道拜耳马赛克图像。 每个像素颜色样本以16位精度存储。
必须从产生图像的 CameraDevice
查询彩色拼接图的布局,原始像素数据的最大和最小编码值,图像的色彩空间以及解释原始传感器图像的所有其他所需信息。
常量值:32(0x00000020)
int RGB_565
RGB格式用于编码为RGB_565的图片。 见setPictureFormat(int)
。
常量值:4(0x00000004)
int YUV_420_888
多平面Android YUV 420格式
这种格式是一种通用的YCbCr格式,能够描述任何4:2:0色度二次采样平面或半平面缓冲区(但不是完全交错的),每个颜色采样8位。
这种格式的图像总是由三个单独的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。
由 Image#getPlanes()
返回的数组中的平面的顺序被保证,使得平面#0总是Y,平面#1总是U(Cb),并且平面#2总是V(Cr)。
Y平面保证不与U / V平面交织(特别是,像素步长始终为 yPlane.getPixelStride()
1)。
U / V平面保证具有相同的行跨度和像素跨度(特别是, uPlane.getRowStride()
== vPlane.getRowStride()
和 uPlane.getPixelStride()
== vPlane.getPixelStride()
;)。
例如, Image
对象可以通过 ImageReader
对象从 CameraDevice
提供此格式的数据。
也可以看看:
常量值:35(0x00000023)
int YUV_422_888
多平面Android YUV 422格式
这种格式是通用的YCbCr格式,能够描述任何4:2:2色度二次采样(平面,半平面或交错)格式,每种颜色样本8位。
这种格式的图像总是由三个单独的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。
由 Image#getPlanes()
返回的数组中的平面的顺序被保证为使得平面#0总是Y,平面#1总是U(Cb),并且平面#2总是V(Cr)。
与此相反的 YUV_420_888
格式,在Y平面可具有像素跨度比1更大 yPlane.getPixelStride()
。
U / V平面保证具有相同的行跨度和像素跨度(特别是, uPlane.getRowStride()
== vPlane.getRowStride()
和 uPlane.getPixelStride()
== vPlane.getPixelStride()
;)。
例如, Image
对象可以从 MediaCodec
到 getOutputImage(int)
对象提供此格式的数据。
也可以看看:
常量值:39(0x00000027)
int YUV_444_888
多平面Android YUV 444格式
这种格式是通用的YCbCr格式,能够描述任何4:4:4(平面,半平面或交错)格式,每种颜色样本8位。
这种格式的图像总是由三个单独的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。
保证 Image#getPlanes()
返回数组中的平面的顺序,使得平面#0总是Y,平面#1总是U(Cb),并且平面#2总是V(Cr)。
与此相反的 YUV_420_888
格式,在Y平面可具有像素跨度比1更大 yPlane.getPixelStride()
。
U / V平面保证具有相同的行跨度和像素跨度(特别是, uPlane.getRowStride()
== vPlane.getRowStride()
和 uPlane.getPixelStride()
== vPlane.getPixelStride()
;)。
例如, Image
对象可以从 MediaCodec
到 getOutputImage(int)
对象提供此格式的数据。
也可以看看:
常量值:40(0x00000028)
int YUY2
用于图像的YCbCr格式,使用YUYV(YUY2)编码格式。
对于 android.hardware.camera2
API,建议使用 YUV_420_888
格式替代YUV输出。
这是Camera
预览图像的替代格式。 相机硬件是否支持此格式可由getSupportedPreviewFormats()
决定。
常量值:20(0x00000014)
int YV12
Android YUV格式。
这种格式暴露给软件解码器和应用程序。
YV12是一个4:2:0的YCrCb平面格式,由WxH Y平面和(W / 2)x(H / 2)Cr和Cb平面组成。
这种格式假定
y_size = stride * height c_stride = ALIGN(stride/2, 16) c_size = c_stride * height/2 size = y_size + c_size * 2 cr_offset = y_size cb_offset = y_size + c_size
对于 android.hardware.camera2
API,建议使用 YUV_420_888
格式替代YUV输出。
对于较旧的相机API,自API级别12以来,此格式保证支持Camera
预览图像; 对于早期的API版本,请检查getSupportedPreviewFormats()
。
请注意,对于相机预览回调使用(请参阅setPreviewCallback(Camera.PreviewCallback)
), 步幅值是尽可能最小的; 也就是说,它等于:
stride = ALIGN(width, 16)
常量值:842094169(0x32315659)
int getBitsPerPixel (int format)
使用此函数可检索ImageFormat的每个像素的位数。
Returns | |
---|---|
int |
the number of bits per pixel of the given format or -1 if the format doesn't exist or is not supported. |