FileDocCategorySizeDatePackage
ImageFormat.javaAPI DocAndroid 5.1 API15108Thu Mar 12 22:22:30 GMT 2015android.graphics

ImageFormat

public class ImageFormat extends Object

Fields Summary
public static final int
UNKNOWN
public static final int
RGB_565
RGB format used for pictures encoded as RGB_565. See {@link android.hardware.Camera.Parameters#setPictureFormat(int)}.
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 {@link android.hardware.camera2} API, the {@link #YUV_420_888} format is recommended for YUV output instead.

For the older camera API, this format is guaranteed to be supported for {@link android.hardware.Camera} preview images since API level 12; for earlier API versions, check {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.

Note that for camera preview callback use (see {@link android.hardware.Camera#setPreviewCallback}), the stride value is the smallest possible; that is, it is equal to:

stride = ALIGN(width, 16)
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 {@link #YV12} format.

This format assumes

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

 y_size = stride * height 

For example, the {@link android.media.Image} object can provide data in this format from a {@link android.hardware.camera2.CameraDevice} through a {@link android.media.ImageReader} object if this format is supported by {@link android.hardware.camera2.CameraDevice}.

public static final int
Y16

Android Y16 format.

Y16 is a YUV planar format comprised of a WxH Y plane, with each pixel being represented by 16 bits. It is just like {@link #Y8}, but has 16 bits per pixel (little endian).

This format assumes

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

 y_size = stride * height 

For example, the {@link android.media.Image} object can provide data in this format from a {@link android.hardware.camera2.CameraDevice} through a {@link android.media.ImageReader} object if this format is supported by {@link android.hardware.camera2.CameraDevice}.

public static final int
NV16
YCbCr format, used for video.

For the {@link android.hardware.camera2} API, the {@link #YUV_420_888} format is recommended for YUV output instead.

Whether this format is supported by the old camera API can be determined by {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.

public static final int
NV21
YCrCb format used for images, which uses the NV21 encoding format.

This is the default format for {@link android.hardware.Camera} preview images, when not otherwise set with {@link android.hardware.Camera.Parameters#setPreviewFormat(int)}.

For the {@link android.hardware.camera2} API, the {@link #YUV_420_888} format is recommended for YUV output instead.

public static final int
YUY2
YCbCr format used for images, which uses YUYV (YUY2) encoding format.

For the {@link android.hardware.camera2} API, the {@link #YUV_420_888} format is recommended for YUV output instead.

This is an alternative format for {@link android.hardware.Camera} preview images. Whether this format is supported by the camera hardware can be determined by {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.

public static final int
JPEG
Compressed JPEG format.

This format is always supported as an output format for the {@link android.hardware.camera2} API, and as a picture format for the older {@link android.hardware.Camera} API

public static final int
YUV_420_888

Multi-plane Android YUV 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 {@link android.media.Image#getPlanes() 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 {@link android.media.Image.Plane#getPixelStride() yPlane.getPixelStride()}).

The U/V planes are guaranteed to have the same row stride and pixel stride (in particular, {@link android.media.Image.Plane#getRowStride() uPlane.getRowStride()} == {@link android.media.Image.Plane#getRowStride() vPlane.getRowStride()} and {@link android.media.Image.Plane#getPixelStride() uPlane.getPixelStride()} == {@link android.media.Image.Plane#getPixelStride() vPlane.getPixelStride()}; ).

For example, the {@link android.media.Image} object can provide data in this format from a {@link android.hardware.camera2.CameraDevice} through a {@link android.media.ImageReader} object.

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 {@link android.hardware.camera2.CameraDevice} which produced the image.

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 ({@code 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
where the row stride is in bytes, not pixels.

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 {@code 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 {@code width * (10 / 8)}, padding bytes will be present at the end of each row.

For example, the {@link android.media.Image} object can provide data in this format from a {@link android.hardware.camera2.CameraDevice} (if supported) through a {@link android.media.ImageReader} object. The {@link android.media.Image#getPlanes() Image#getPlanes()} will return a single plane containing the pixel data. The pixel stride is always 0 in {@link android.media.Image.Plane#getPixelStride()}, and the {@link android.media.Image.Plane#getRowStride()} describes the vertical neighboring pixel distance (in bytes) between adjacent rows.

Constructors Summary
Methods Summary
public static intgetBitsPerPixel(int format)
Use this function to retrieve the number of bits per pixel of an ImageFormat.

param
format
return
the number of bits per pixel of the given format or -1 if the format doesn't exist or is not supported.


                                                       
         
        switch (format) {
            case RGB_565:
                return 16;
            case NV16:
                return 16;
            case YUY2:
                return 16;
            case YV12:
                return 12;
            case Y8:
                return 8;
            case Y16:
                return 16;
            case NV21:
                return 12;
            case YUV_420_888:
                return 12;
            case RAW_SENSOR:
                return 16;
            case RAW10:
                return 10;
        }
        return -1;
    
public static booleanisPublicFormat(int format)
Determine whether or not this is a public-visible {@code format}.

In particular, {@code @hide} formats will return {@code false}.

Any other formats (including UNKNOWN) will return {@code false}.

param
format an integer format
return
a boolean
hide

        switch (format) {
            case RGB_565:
            case NV16:
            case YUY2:
            case YV12:
            case JPEG:
            case NV21:
            case YUV_420_888:
            case RAW_SENSOR:
            case RAW10:
                return true;
        }

        return false;