Most visited

Recently visited

Added in API level 8

ImageFormat

public class ImageFormat
extends Object

java.lang.Object
   ↳ android.graphics.ImageFormat


Summary

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

Constants

DEPTH16

Added in API level 23
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

  • an even width
  • an even height
  • a horizontal stride multiple of 16 pixels

 y_size = stride * height 
When produced by a camera, the units for the range are millimeters.

常量值:1144402265(0x44363159)

DEPTH_POINT_CLOUD

Added in API level 23
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)

FLEX_RGBA_8888

Added in API level 23
int FLEX_RGBA_8888

多平面Android RGBA格式

这种格式是通用的RGBA格式,能够描述大多数RGBA格式,每种颜色样本8位。

这种格式的图像总是由四个独立的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。

保证Image#getPlanes()返回数组中的平面的顺序,使得#0平面始终为R(红色),#1平面始终为G(绿色),#2平面始终为B(蓝色),并且平面#3始终为一个(阿尔法)。 这种格式可能表示预乘或未预乘alpha。

所有四个平面保证具有相同的行跨度和像素跨度。

例如, Image对象可以从 MediaCodecgetOutputImage(int)对象提供此格式的数据。

也可以看看:

常量值:42(0x0000002a)

FLEX_RGB_888

Added in API level 23
int FLEX_RGB_888

多平面Android RGB格式

这种格式是一种通用的RGB格式,能够描述大多数RGB格式,每种颜色样本8位。

这种格式的图像总是由三个单独的数据缓冲区表示,每个颜色平面一个。 附加信息总是伴随缓冲器,描述每个平面的行跨度和像素跨度。

数组 Image#getPlanes()返回的数组中的平面的顺序被保证为使得#0平面总是R(红色),#1平面总是G(绿色),并且平面#2总是B(蓝色)。

所有三个平面都保证具有相同的行跨度和像素跨度。

例如, Image对象可以从 MediaCodecgetOutputImage(int)对象提供此格式的数据。

也可以看看:

常量值:41(0x00000029)

JPEG

Added in API level 8
int JPEG

压缩的JPEG格式。

此格式始终作为 android.hardware.camera2 API的输出格式支持,并作为旧版 Camera API的图片格式

常量值:256(0x00000100)

NV16

Added in API level 8
int NV16

YCbCr格式,用于视频。

对于 android.hardware.camera2 API,建议使用 YUV_420_888格式替代YUV输出。

这种格式是否由旧相机API支持可由 getSupportedPreviewFormats()确定。

常量值:16(0x00000010)

NV21

Added in API level 8
int NV21

用于图像的YCrCb格式,使用NV21编码格式。

这是 Camera预览图像的默认格式,当未另行使用 setPreviewFormat(int)设置时。

对于 android.hardware.camera2 API,建议使用 YUV_420_888格式替代YUV输出。

常量值:17(0x00000011)

PRIVATE

Added in API level 23
int PRIVATE

Android专用的不透明图像格式。

实际格式和像素数据布局的选择完全取决于设备特定的和框架内部的实现,并且可能根据使用情况而变化,即使对于相同的设备也是如此。 这种格式的缓冲区可以由像ImageWriter这样的组件ImageWriter ,并由消费者根据设备/框架私有信息正确解释,如CameraDevice 但是,这些缓冲区不能直接被应用程序访问。

Image这种格式是从得到 ImageReaderImageWriter ,所述 getPlanes()方法将返回一个空 Plane阵列。

如果将这种格式的缓冲区用作OpenGL ES纹理,则框架将假定抽样纹理将始终返回1.0的Alpha值(即,缓冲区仅包含不透明的像素值)。

常量值:34(0x00000022)

RAW10

Added in API level 21
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]

这种格式假定

  • a width multiple of 4 pixels
  • an even height

size = row stride * height
where 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)

RAW12

Added in API level 23
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]

这种格式假定

  • a width multiple of 4 pixels
  • an even height

size = row stride * height
where 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)

RAW_PRIVATE

Added in API level 24
int RAW_PRIVATE

私有原始相机传感器图像格式,实现独立像素布局的单通道图像。

RAW_PRIVATE是来自图像传感器的未处理原始图像缓冲区的格式。 这种格式的缓冲区的实际结构取决于实现。

常量值:36(0x00000024)

RAW_SENSOR

Added in API level 21
int RAW_SENSOR

一般原始相机传感器图像格式,通常代表单通道拜耳马赛克图像。 每个像素颜色样本以16位精度存储。

必须从产生图像的 CameraDevice查询彩色拼接图的布局,原始像素数据的最大和最小编码值,图像的色彩空间以及解释原始传感器图像的所有其他所需信息。

常量值:32(0x00000020)

RGB_565

Added in API level 8
int RGB_565

RGB格式用于编码为RGB_565的图片。 setPictureFormat(int)

常量值:4(0x00000004)

UNKNOWN

Added in API level 8
int UNKNOWN

常量值:0(0x00000000)

YUV_420_888

Added in API level 19
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)

YUV_422_888

Added in API level 23
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对象可以从 MediaCodecgetOutputImage(int)对象提供此格式的数据。

也可以看看:

常量值:39(0x00000027)

YUV_444_888

Added in API level 23
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对象可以从 MediaCodecgetOutputImage(int)对象提供此格式的数据。

也可以看看:

常量值:40(0x00000028)

YUY2

Added in API level 8
int YUY2

用于图像的YCbCr格式,使用YUYV(YUY2)编码格式。

对于 android.hardware.camera2 API,建议使用 YUV_420_888格式替代YUV输出。

这是Camera预览图像的替代格式。 相机硬件是否支持此格式可由getSupportedPreviewFormats()决定。

常量值:20(0x00000014)

YV12

Added in API level 9
int YV12

Android YUV格式。

这种格式暴露给软件解码器和应用程序。

YV12是一个4:2:0的YCrCb平面格式,由WxH Y平面和(W / 2)x(H / 2)Cr和Cb平面组成。

这种格式假定

  • an even width
  • an even height
  • a horizontal stride multiple of 16 pixels
  • a vertical stride equal to the height

 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)

Public constructors

ImageFormat

Added in API level 8
ImageFormat ()

Public methods

getBitsPerPixel

Added in API level 8
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.

Hooray!