ImageFormat
  public
  
  
  
  class
  ImageFormat
  
    extends Object
  
  
  
  
  
  
| java.lang.Object | |
| ↳ | android.graphics.ImageFormat | 
Summary
| Constants | |
|---|---|
| int | DEPTH16Android dense depth image format. | 
| int | DEPTH_JPEGDepth augmented compressed JPEG format. | 
| int | DEPTH_POINT_CLOUDAndroid sparse depth point cloud format. | 
| int | FLEX_RGBA_8888Multi-plane Android RGBA format This format is a generic RGBA format, capable of describing most RGBA formats, with 8 bits per color sample. | 
| int | FLEX_RGB_888Multi-plane Android RGB format This format is a generic RGB format, capable of describing most RGB formats, with 8 bits per color sample. | 
| int | HEICCompressed HEIC format. | 
| int | HEIC_ULTRAHDRHigh Efficiency Image File Format (HEIF) with embedded HDR gain map This format defines the HEIC brand of High Efficiency Image File Format as described in ISO/IEC 23008-12:2024 with HDR gain map according to ISO/CD 21496\u20101. | 
| int | JPEGCompressed JPEG format. | 
| int | JPEG_RCompressed JPEG format that includes an embedded recovery map. | 
| int | NV16YCbCr format, used for video. | 
| int | NV21YCrCb format used for images, which uses the NV21 encoding format. | 
| int | PRIVATEAndroid private opaque image format. | 
| int | RAW10Android 10-bit raw format This is a single-plane, 10-bit per pixel, densely packed (in each row), unprocessed format, usually representing raw Bayer-pattern images coming from an image sensor. | 
| int | RAW12Android 12-bit raw format This is a single-plane, 12-bit per pixel, densely packed (in each row), unprocessed format, usually representing raw Bayer-pattern images coming from an image sensor. | 
| int | RAW_PRIVATEPrivate raw camera sensor image format, a single channel image with implementation dependent pixel layout. | 
| int | RAW_SENSORGeneral raw camera sensor image format, usually representing a single-channel Bayer-mosaic image. | 
| int | RGB_565RGB format used for pictures encoded as RGB_565. | 
| int | UNKNOWN
 | 
| int | Y8Android Y8 format. | 
| int | YCBCR_P010Android YUV P010 format. | 
| int | YCBCR_P210Android YUV P210 format. | 
| int | YUV_420_888Multi-plane Android YUV 420 format This format is a generic YCbCr format, capable of describing any 4:2:0 chroma-subsampled planar or semiplanar buffer (but not fully interleaved), with 8 bits per color sample. | 
| int | YUV_422_888Multi-plane Android YUV 422 format This format is a generic YCbCr format, capable of describing any 4:2:2 chroma-subsampled (planar, semiplanar or interleaved) format, with 8 bits per color sample. | 
| int | YUV_444_888Multi-plane Android YUV 444 format This format is a generic YCbCr format, capable of describing any 4:4:4 (planar, semiplanar or interleaved) format, with 8 bits per color sample. | 
| int | YUY2YCbCr format used for images, which uses YUYV (YUY2) encoding format. | 
| int | YV12Android YUV format. | 
| Public constructors | |
|---|---|
| 
      ImageFormat()
       | |
| Public methods | |
|---|---|
| 
        
        
        static
        
        
        int | 
      getBitsPerPixel(int format)
      Use this function to retrieve the number of bits per pixel of an ImageFormat. | 
| Inherited methods | |
|---|---|
Constants
DEPTH16
public static final int DEPTH16
Android dense depth image format.
Each pixel is 16 bits, representing a depth ranging measurement from a depth camera or similar sensor. The 16-bit sample consists of a confidence value and the actual ranging measurement.
The confidence value is an estimate of correctness for this sample. It is encoded in the 3 most significant bits of the sample, with a value of 0 representing 100% confidence, a value of 1 representing 0% confidence, a value of 2 representing 1/7, a value of 3 representing 2/7, and so on.
As an example, the following sample extracts the range and confidence from the first pixel
 of a DEPTH16-format Image, and converts the confidence to a
 floating-point value between 0 and 1.f inclusive, with 1.f representing maximum confidence:
 
    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
Constant Value: 1144402265 (0x44363159)
DEPTH_JPEG
public static final int DEPTH_JPEG
Depth augmented compressed JPEG format.
JPEG compressed main image along with XMP embedded depth metadata following ISO 16684-1:2011(E).
Constant Value: 1768253795 (0x69656963)
DEPTH_POINT_CLOUD
public static final int DEPTH_POINT_CLOUD
Android sparse depth point cloud format.
A variable-length list of 3D points plus a confidence value, with each point represented by four floats; first the X, Y, Z position coordinates, and then the confidence value.
The number of points is (size of the buffer in bytes) / 16.
 
The coordinate system and units of the position values depend on the source of the point cloud data. The confidence value is between 0.f and 1.f, inclusive, with 0 representing 0% confidence and 1.f representing 100% confidence in the measured position values.
As an example, the following code extracts the first depth point in a DEPTH_POINT_CLOUD
 format Image:
 
    FloatBuffer floatDepthBuffer = img.getPlanes()[0].getBuffer().asFloatBuffer();
    float x = floatDepthBuffer.get();
    float y = floatDepthBuffer.get();
    float z = floatDepthBuffer.get();
    float confidence = floatDepthBuffer.get();
 DEPTH_OUTPUT
 capability, DEPTH_POINT_CLOUD coordinates have units of meters, and the coordinate system is
 defined by the camera's pose transforms:
 CameraCharacteristics.LENS_POSE_TRANSLATION and
 CameraCharacteristics.LENS_POSE_ROTATION. That means the origin is
 the optical center of the camera device, and the positive Z axis points along the camera's optical axis,
 toward the scene.
    
      Constant Value: 257 (0x00000101)
FLEX_RGBA_8888
public static final int FLEX_RGBA_8888
Multi-plane Android RGBA format
This format is a generic RGBA format, capable of describing most RGBA formats, with 8 bits per color sample.
Images in this format are always represented by four separate buffers of data, one for each color plane. Additional information always accompanies the buffers, describing the row stride and the pixel stride for each plane.
The order of planes in the array returned by
 Image#getPlanes() is guaranteed such that
 plane #0 is always R (red), plane #1 is always G (green), plane #2 is always B (blue),
 and plane #3 is always A (alpha). This format may represent pre-multiplied or
 non-premultiplied alpha.
All four planes are guaranteed to have the same row strides and pixel strides.
For example, the Image object can provide data
 in this format from a MediaCodec
 through MediaCodec.getOutputImage(int) object.
See also:
Constant Value: 42 (0x0000002a)
FLEX_RGB_888
public static final int FLEX_RGB_888
Multi-plane Android RGB format
This format is a generic RGB format, capable of describing most RGB formats, with 8 bits per color sample.
Images in this format are always represented by three separate buffers of data, one for each color plane. Additional information always accompanies the buffers, describing the row stride and the pixel stride for each plane.
The order of planes in the array returned by
 Image#getPlanes() is guaranteed such that
 plane #0 is always R (red), plane #1 is always G (green), and plane #2 is always B
 (blue).
All three planes are guaranteed to have the same row strides and pixel strides.
For example, the Image object can provide data
 in this format from a MediaCodec
 through MediaCodec.getOutputImage(int) object.
See also:
Constant Value: 41 (0x00000029)
HEIC
public static final int HEIC
Compressed HEIC format.
This format defines the HEIC brand of High Efficiency Image File Format as described in ISO/IEC 23008-12.
Constant Value: 1212500294 (0x48454946)
HEIC_ULTRAHDR
public static final int HEIC_ULTRAHDR
High Efficiency Image File Format (HEIF) with embedded HDR gain map
This format defines the HEIC brand of High Efficiency Image File Format as described in ISO/IEC 23008-12:2024 with HDR gain map according to ISO/CD 21496\u20101.
Constant Value: 4102 (0x00001006)
JPEG
public static final int JPEG
Compressed JPEG format.
This format is always supported as an output format for the
 android.hardware.camera2 API, and as a picture format for the older
 Camera API
Constant Value: 256 (0x00000100)
JPEG_R
public static final int JPEG_R
Compressed JPEG format that includes an embedded recovery map.
JPEG compressed main image along with embedded recovery map following the Ultra HDR Image format specification.
Constant Value: 4101 (0x00001005)
NV16
public static final int NV16
YCbCr format, used for video.
For the android.hardware.camera2 API, the YUV_420_888 format is
 recommended for YUV output instead.
Whether this format is supported by the old camera API can be determined by
 Camera.Parameters.getSupportedPreviewFormats().
Constant Value: 16 (0x00000010)
NV21
public static final int NV21
YCrCb format used for images, which uses the NV21 encoding format.
This is the default format
 for Camera preview images, when not otherwise set with
 Camera.Parameters.setPreviewFormat(int).
For the android.hardware.camera2 API, the YUV_420_888 format is
 recommended for YUV output instead.
Constant Value: 17 (0x00000011)
PRIVATE
public static final int PRIVATE
Android private opaque image format.
 The choices of the actual format and pixel data layout are entirely up to
 the device-specific and framework internal implementations, and may vary
 depending on use cases even for the same device. The buffers of this
 format can be produced by components like
 ImageWriter , and interpreted correctly
 by consumers like CameraDevice based on the device/framework private information. However,
 these buffers are not directly accessible to the application.
 
 When an Image of this format is obtained from
 an ImageReader or
 ImageWriter, the
 getPlanes() method will return an
 empty Plane array.
 
If a buffer of this format is to be used as an OpenGL ES texture, the framework will assume that sampling the texture will always return an alpha value of 1.0 (i.e. the buffer contains only opaque pixel values).
Constant Value: 34 (0x00000022)
RAW10
public static final int RAW10
Android 10-bit raw format
This is a single-plane, 10-bit per pixel, densely packed (in each row), unprocessed format, usually representing raw Bayer-pattern images coming from an image sensor.
 In an image buffer with this format, starting from the first pixel of
 each row, each 4 consecutive pixels are packed into 5 bytes (40 bits).
 Each one of the first 4 bytes contains the top 8 bits of each pixel, The
 fifth byte contains the 2 least significant bits of the 4 pixels, the
 exact layout data for each 4 consecutive pixels is illustrated below
 (Pi[j] stands for the jth bit of the ith pixel):
 
| 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] | 
This format assumes
- a width multiple of 4 pixels
- an even height
size = row stride * height
 Since this is a densely packed format, the pixel stride is always 0. The
 application must use the pixel data layout defined in above table to
 access each row data. When row stride is equal to width * (10 / 8), there
 will be no padding bytes at the end of each row, the entire image data is
 densely packed. When stride is larger than width * (10 / 8), padding
 bytes will be present at the end of each row.
 
 For example, the Image object can provide data in
 this format from a CameraDevice (if
 supported) through a ImageReader object. The
 Image#getPlanes() will return a
 single plane containing the pixel data. The pixel stride is always 0 in
 Image.Plane.getPixelStride(), and the
 Image.Plane.getRowStride() describes the vertical
 neighboring pixel distance (in bytes) between adjacent rows.
 
See also:
Constant Value: 37 (0x00000025)
RAW12
public static final int RAW12
Android 12-bit raw format
This is a single-plane, 12-bit per pixel, densely packed (in each row), unprocessed format, usually representing raw Bayer-pattern images coming from an image sensor.
In an image buffer with this format, starting from the first pixel of each row, each two consecutive pixels are packed into 3 bytes (24 bits). The first and second byte contains the top 8 bits of first and second pixel. The third byte contains the 4 least significant bits of the two pixels, the exact layout data for each two consecutive pixels is illustrated below (Pi[j] stands for the jth bit of the ith pixel):
| 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] | 
This format assumes
- a width multiple of 4 pixels
- an even height
size = row stride * height
 Since this is a densely packed format, the pixel stride is always 0. The
 application must use the pixel data layout defined in above table to
 access each row data. When row stride is equal to width * (12 / 8), there
 will be no padding bytes at the end of each row, the entire image data is
 densely packed. When stride is larger than width * (12 / 8), padding
 bytes will be present at the end of each row.
 
 For example, the Image object can provide data in
 this format from a CameraDevice (if
 supported) through a ImageReader object. The
 Image#getPlanes() will return a
 single plane containing the pixel data. The pixel stride is always 0 in
 Image.Plane.getPixelStride(), and the
 Image.Plane.getRowStride() describes the vertical
 neighboring pixel distance (in bytes) between adjacent rows.
 
See also:
Constant Value: 38 (0x00000026)
RAW_PRIVATE
public static final int RAW_PRIVATE
Private raw camera sensor image format, a single channel image with implementation dependent pixel layout.
RAW_PRIVATE is a format for unprocessed raw image buffers coming from an image sensor. The actual structure of buffers of this format is implementation-dependent.
Constant Value: 36 (0x00000024)
RAW_SENSOR
public static final int RAW_SENSOR
General raw camera sensor image format, usually representing a single-channel Bayer-mosaic image. Each pixel color sample is stored with 16 bits of precision.
The layout of the color mosaic, the maximum and minimum encoding
 values of the raw pixel data, the color space of the image, and all other
 needed information to interpret a raw sensor image must be queried from
 the CameraDevice which produced the
 image.
Constant Value: 32 (0x00000020)
RGB_565
public static final int RGB_565
RGB format used for pictures encoded as RGB_565. See
 Camera.Parameters.setPictureFormat(int).
Constant Value: 4 (0x00000004)
Y8
public static final int Y8
Android Y8 format.
Y8 is a YUV planar format comprised of a WxH Y plane only, with each pixel
 being represented by 8 bits. It is equivalent to just the Y plane from YV12
 format.
This format assumes
- an even width
- an even height
- a horizontal stride multiple of 16 pixels
size = stride * height
For example, the Image object can provide data
 in this format from a CameraDevice (if
 supported) through a ImageReader object. The
 Image#getPlanes() will return a
 single plane containing the pixel data. The pixel stride is always 1 in
 Image.Plane.getPixelStride(), and the
 Image.Plane.getRowStride() describes the vertical
 neighboring pixel distance (in bytes) between adjacent rows.
See also:
Constant Value: 538982489 (0x20203859)
YCBCR_P010
public static final int YCBCR_P010
Android YUV P010 format.
P010 is a 10-bit 4:2:0 YCbCr semiplanar format comprised of a WxH Y plane followed by a Wx(H/2) CbCr plane. Each sample is represented by a 16-bit little-endian value, with the lower 6 bits set to zero.For example, the Image object can provide data
 in this format from a CameraDevice
 through a ImageReader object if this format is
 supported by CameraDevice.
See also:
Constant Value: 54 (0x00000036)
YCBCR_P210
public static final int YCBCR_P210
Android YUV P210 format.
P210 is a 10-bit 4:2:2 YCbCr semiplanar format comprised of a WxH Y plane followed by a WxH CbCr plane. Each sample is represented by a 16-bit little-endian value, with the lower 6 bits set to zero.For example, the Image object can provide data
 in this format from a CameraDevice
 through a ImageReader object if this format is
 supported by CameraDevice.
See also:
Constant Value: 60 (0x0000003c)
YUV_420_888
public static final int YUV_420_888
Multi-plane Android YUV 420 format
This format is a generic YCbCr format, capable of describing any 4:2:0 chroma-subsampled planar or semiplanar buffer (but not fully interleaved), with 8 bits per color sample.
Images in this format are always represented by three separate buffers of data, one for each color plane. Additional information always accompanies the buffers, describing the row stride and the pixel stride for each plane.
The order of planes in the array returned by
 Image#getPlanes() is guaranteed such that
 plane #0 is always Y, plane #1 is always U (Cb), and plane #2 is always V (Cr).
The Y-plane is guaranteed not to be interleaved with the U/V planes
 (in particular, pixel stride is always 1 in
 yPlane.getPixelStride()).
The U/V planes are guaranteed to have the same row stride and pixel stride
 (in particular,
 uPlane.getRowStride()
 == vPlane.getRowStride() and
 uPlane.getPixelStride()
 == vPlane.getPixelStride();
 ).
For example, the Image object can provide data
 in this format from a CameraDevice
 through a ImageReader object.
See also:
Constant Value: 35 (0x00000023)
YUV_422_888
public static final int YUV_422_888
Multi-plane Android YUV 422 format
This format is a generic YCbCr format, capable of describing any 4:2:2 chroma-subsampled (planar, semiplanar or interleaved) format, with 8 bits per color sample.
Images in this format are always represented by three separate buffers of data, one for each color plane. Additional information always accompanies the buffers, describing the row stride and the pixel stride for each plane.
The order of planes in the array returned by
 Image#getPlanes() is guaranteed such that
 plane #0 is always Y, plane #1 is always U (Cb), and plane #2 is always V (Cr).
In contrast to the YUV_420_888 format, the Y-plane may have a pixel
 stride greater than 1 in
 yPlane.getPixelStride().
The U/V planes are guaranteed to have the same row stride and pixel stride
 (in particular,
 uPlane.getRowStride()
 == vPlane.getRowStride() and
 uPlane.getPixelStride()
 == vPlane.getPixelStride();
 ).
For example, the Image object can provide data
 in this format from a MediaCodec
 through MediaCodec.getOutputImage(int) object.
See also:
Constant Value: 39 (0x00000027)
YUV_444_888
public static final int YUV_444_888
Multi-plane Android YUV 444 format
This format is a generic YCbCr format, capable of describing any 4:4:4 (planar, semiplanar or interleaved) format, with 8 bits per color sample.
Images in this format are always represented by three separate buffers of data, one for each color plane. Additional information always accompanies the buffers, describing the row stride and the pixel stride for each plane.
The order of planes in the array returned by
 Image#getPlanes() is guaranteed such that
 plane #0 is always Y, plane #1 is always U (Cb), and plane #2 is always V (Cr).
In contrast to the YUV_420_888 format, the Y-plane may have a pixel
 stride greater than 1 in
 yPlane.getPixelStride().
The U/V planes are guaranteed to have the same row stride and pixel stride
 (in particular,
 uPlane.getRowStride()
 == vPlane.getRowStride() and
 uPlane.getPixelStride()
 == vPlane.getPixelStride();
 ).
For example, the Image object can provide data
 in this format from a MediaCodec
 through MediaCodec.getOutputImage(int) object.
See also:
Constant Value: 40 (0x00000028)
YUY2
public static final int YUY2
YCbCr format used for images, which uses YUYV (YUY2) encoding format.
For the android.hardware.camera2 API, the YUV_420_888 format is
 recommended for YUV output instead.
This is an alternative format for Camera preview images. Whether
 this format is supported by the camera hardware can be determined by
 Camera.Parameters.getSupportedPreviewFormats().
Constant Value: 20 (0x00000014)
YV12
public static final int YV12
Android YUV format.
This format is exposed to software decoders and applications.
YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed by (W/2) x (H/2) Cr and Cb planes.
This format assumes
- 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
For the android.hardware.camera2 API, the YUV_420_888 format is
 recommended for YUV output instead.
For the older camera API, this format is guaranteed to be supported for
 Camera preview images since API level 12; for earlier API versions,
 check Camera.Parameters.getSupportedPreviewFormats().
 
Note that for camera preview callback use (see
 Camera.setPreviewCallback(PreviewCallback)), the
 stride value is the smallest possible; that is, it is equal
 to:
 
stride = ALIGN(width, 16)
Constant Value: 842094169 (0x32315659)
Public constructors
ImageFormat
public ImageFormat ()
Public methods
getBitsPerPixel
public static int getBitsPerPixel (int format)
Use this function to retrieve the number of bits per pixel of an ImageFormat.
| Parameters | |
|---|---|
| format | int: Value isUNKNOWN,PixelFormat.RGBA_8888,PixelFormat.RGBX_8888,PixelFormat.RGB_888,RGB_565,YV12,Y8, android.graphics.ImageFormat.Y16,YCBCR_P010,YCBCR_P210,NV16,NV21,YUY2,JPEG,DEPTH_JPEG,YUV_420_888,YUV_422_888,YUV_444_888,FLEX_RGB_888,FLEX_RGBA_8888,RAW_SENSOR,RAW_PRIVATE,RAW10,RAW12,DEPTH16,DEPTH_POINT_CLOUD, android.graphics.ImageFormat.RAW_DEPTH, android.graphics.ImageFormat.RAW_DEPTH10,PRIVATE,HEIC,HEIC_ULTRAHDR, orJPEG_R | 
| Returns | |
|---|---|
| int | the number of bits per pixel of the given format or -1 if the format doesn't exist or is not supported. | 
