Android ImageFormat

1,767 阅读6分钟

RGB

用于编码为RGB_565的图片的RGB格式,Camera.Parameters.setPictureFormat(int).

YV12

YV12是一种4:2:0 YUV平面格式,由Width*Hight Y平面和(Width/2)x(Hight/2)U和V平面组成。

Y8

Y8是由Width*Hight Y平面组成的YUV平面格式,每个像素由8位表示。它仅相当于YV12格式中的Y平面。

Y16

Y16是由Width*Hight Y平面组成的YUV平面格式,每个像素由16位表示。它与Y8一样,但每像素有16位(小端)。

nv16

用于video.

对于Camera2 API,YUV输出建议使用YUV_420_888格式。

NV21

用于图像.

是Camera1预览图像的默认格式

对于Camera2 API,YUV输出建议使用YUV_420_888格式。

NV21 format is not supported

YUV2

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

对于Camera2 API,YUV输出建议使用YUV_420_888格式。

是Camera1 API预览图像的另一种格式。摄像头硬件不一定支持此格式

JPEG

压缩的JPEG格式。

Camera2 API始终支持此格式作为输出格式

Camera1 API始终支持此格式作为图片格式

DEPTH_JPEG

深度增强压缩JPEG格式。

YUV_420_888

多平面 该格式是一种通用YUV格式,能够描述任何4:2:0色度二次采样平面或半平面缓冲区(但不完全交错),每个颜色样本8位。

此格式的图像始终由三个独立的数据缓冲区表示,每个颜色平面一个缓冲区。附加信息始终伴随缓冲区,描述每个平面的行步幅和像素步幅。

用三个平面将Y U V分量分开存储,Image#getPlanes()获得的平面数组,其中plane[0]存放Y分量,plane[1]存放U(Cb)分量,plane[2]存放V(Cr)分量.

Y平面不会与U/V平面交错(特别是在yPlane.getPixelStride()中,像素步长始终为1)。

U/V平面保证具有相同的行步长和像素步长(特别是uPlane.getRowStride()==vPlane.getRowStride()和uPlane.getPixelStride()==vPlane.getPixelStride())。

YUV_422_888

多平面 该格式是一种通用YUV格式,能够描述任何4:2:2色度二次采样(平面、半平面或交错)格式,每个颜色样本8位。

此格式的图像始终由三个独立的数据缓冲区表示,每个颜色平面一个缓冲区。附加信息始终伴随缓冲区,描述每个平面的行步幅和像素步幅。

用三个平面将Y U V分量分开存储,Image#getPlanes()获得的平面数组,其中plane[0]存放Y分量,plane[1]存放U(Cb)分量,plane[2]存放V(Cr)分量.

与YUV_420_888格式不同,Y平面在yPlane.getPixelStride()中的像素步长可能大于1。

U/V平面保证具有相同的行步长和像素步长(特别是uPlane.getRowStride()==vPlane.getRowStride()和uPlane.getPixelStride()==vPlane.getPixelStride())。

YUV_444_888

多平面 此格式是一种通用YCbCr格式,能够描述任何4:4:4(平面、半平面或交错)格式,每个颜色样本8位。

此格式的图像始终由三个独立的数据缓冲区表示,每个颜色平面一个缓冲区。附加信息始终伴随缓冲区,描述每个平面的行步幅和像素步幅。

用三个平面将Y U V分量分开存储,Image#getPlanes()获得的平面数组,其中plane[0]存放Y分量,plane[1]存放U(Cb)分量,plane[2]存放V(Cr)分量.

与YUV_420_888格式不同,Y平面在yPlane.getPixelStride()中的像素步长可能大于1。

U/V平面保证具有相同的行步长和像素步长(特别是uPlane.getRowStride()==vPlane.getRowStride()和uPlane.getPixelStride()==vPlane.getPixelStride();)。

FLEX_RGB_888

此格式是通用RGB格式,能够描述大多数RGB格式,每个颜色样本8位。

此格式的图像始终由三个独立的数据缓冲区表示,每个颜色平面一个缓冲区。附加信息始终伴随缓冲区,描述每个平面的行步幅和像素步幅。

Image#getPlanes()返回的数组中的平面顺序得到保证,因此平面#0始终为R(红色),平面#1始终为G(绿色),平面#2始终为B(蓝色)。

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

FLEX_RGBA_8888

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

此格式的图像始终由四个独立的数据缓冲区表示,每个颜色平面一个缓冲区。附加信息始终伴随缓冲区,描述每个平面的行步幅和像素步幅。

Image#getPlanes()返回的数组中的平面顺序得到保证,因此平面0始终为R(红色),平面1始终为G(绿色),平面2始终为B(蓝色),平面3始终为A(alpha)。此格式可以表示预乘或非预乘alpha。

所有四个平面都保证具有相同的行步长和像素步长。

RAW_SENSOR

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

必须从生成图像的android.hardware.camera2.CameraDevice中查询彩色马赛克的布局、原始像素数据的最大和最小编码值、图像的颜色空间以及解释原始传感器图像所需的所有其他信息。

RAW_PRIVATE

专用原始摄像头传感器图像格式,单通道图像,具体实施取决于像素布局。

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

RAW10

这是一个单平面,每像素10位,密集包装(每行),未经处理的格式,通常表示来自图像传感器的原始拜耳模式图像。

RAW12

这是一个单平面,每像素12位,密集包装(每行),未经处理的格式,通常表示来自图像传感器的原始拜耳模式图像。

DEPTH16

Android密集深度图像格式。

每个像素为16位,表示深度相机或类似传感器的深度范围测量。16位样本由置信值和实际测距测量值组成。

  • YV12(Planar)

DEPTH_POINT_CLOUD

Android稀疏深度点云格式。

3D点的可变长度列表加上置信值,每个点由四个浮点数表示;首先是X、Y、Z位置坐标,然后是置信值。

点数为(缓冲区大小(字节)/16。

RAW_DEPTH

未处理的依赖于实现的原始深度测量,16位样本不透明。

PRIVATE

Android私有不透明图像格式。

实际格式和像素数据布局的选择完全取决于特定于设备和框架的内部实现,甚至对于同一设备,也可能因使用情况而异。这种格式的缓冲区可以由ImageWriter等组件生成,并由CameraDevice等消费者根据设备/框架私有信息正确解释。但是,应用程序无法直接访问这些缓冲区。

当从ImageReader或ImageWriter获取此格式的图像时,getPlanes()方法将返回一个空平面数组。

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

HEIC

压缩HEIC格式。

该格式定义了ISO/IEC 23008-12中所述的HEIC品牌的高效图像文件格式。