Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Constants](https://developer.android.com/reference/android/graphics/ImageFormat#constants) \| [Ctors](https://developer.android.com/reference/android/graphics/ImageFormat#pubctors) \| [Methods](https://developer.android.com/reference/android/graphics/ImageFormat#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/graphics/ImageFormat#inhmethods)

# ImageFormat

*** ** * ** ***

[Kotlin](https://developer.android.com/reference/kotlin/android/graphics/ImageFormat "View this page in Kotlin") \|Java


`
public


class
ImageFormat
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.graphics.ImageFormat |

<br />

*** ** * ** ***

## Summary

| ### Constants ||
|---|---|
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#DEPTH16` <br /> Android dense depth image format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#DEPTH_JPEG` Depth augmented compressed JPEG format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#DEPTH_POINT_CLOUD` Android sparse depth point cloud format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#FLEX_RGBA_8888` <br /> Multi-plane Android RGBA format This format is a generic RGBA format, capable of describing most RGBA formats, with 8 bits per color sample. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#FLEX_RGB_888` <br /> Multi-plane Android RGB format This format is a generic RGB format, capable of describing most RGB formats, with 8 bits per color sample. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#HEIC` Compressed HEIC format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#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. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#JPEG` Compressed JPEG format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#JPEG_R` Compressed JPEG format that includes an embedded recovery map. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#NV16` YCbCr format, used for video. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#NV21` YCrCb format used for images, which uses the NV21 encoding format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#PRIVATE` Android private opaque image format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#RAW10` <br /> 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. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#RAW12` <br /> 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. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#RAW14` <br /> Android 14-bit raw format This is a single-plane, 14-bit per pixel, densely packed (in each row), unprocessed format, usually representing raw Bayer-pattern images coming from an image sensor. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#RAW_PRIVATE` <br /> Private raw camera sensor image format, a single channel image with implementation dependent pixel layout. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#RAW_SENSOR` <br /> General raw camera sensor image format, usually representing a single-channel Bayer-mosaic image. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#RGB_565` RGB format used for pictures encoded as RGB_565. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#UNKNOWN` |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#Y8` <br /> Android Y8 format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YCBCR_P010` <br /> Android YUV P010 format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YCBCR_P210` <br /> Android YUV P210 format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` <br /> 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. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_422_888` <br /> 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. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_444_888` <br /> 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. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YUY2` YCbCr format used for images, which uses YUYV (YUY2) encoding format. |
| `int` | `https://developer.android.com/reference/android/graphics/ImageFormat#YV12` <br /> Android YUV format. |

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/graphics/ImageFormat#ImageFormat()() ` |

| ### Public methods ||
|---|---|
| ` static int` | ` https://developer.android.com/reference/android/graphics/ImageFormat#getBitsPerPixel(int)(int format) ` Use this function to retrieve the number of bits per pixel of an ImageFormat. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Constants

### DEPTH16

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int DEPTH16
```

<br />

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 `https://developer.android.com/reference/android/media/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;
 
```

<br />

This format assumes

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

<br />

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

<br />

<br />

Constant Value:

1144402265
(0x44363159)


### DEPTH_JPEG

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
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).

<br />

<br />

Constant Value:

1768253795
(0x69656963)


### DEPTH_POINT_CLOUD

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
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 `https://developer.android.com/reference/android/media/Image`:

```
    FloatBuffer floatDepthBuffer = img.getPlanes()[0].getBuffer().asFloatBuffer();
    float x = floatDepthBuffer.get();
    float y = floatDepthBuffer.get();
    float z = floatDepthBuffer.get();
    float confidence = floatDepthBuffer.get();
 
```
For camera devices that support the `https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT` capability, DEPTH_POINT_CLOUD coordinates have units of meters, and the coordinate system is defined by the camera's pose transforms: `https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#LENS_POSE_TRANSLATION` and `https://developer.android.com/reference/android/hardware/camera2/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.

<br />

<br />

Constant Value:

257
(0x00000101)


### FLEX_RGBA_8888

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int FLEX_RGBA_8888
```

<br />

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
`https://developer.android.com/reference/android/media/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 `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/media/MediaCodec`
through `https://developer.android.com/reference/android/media/MediaCodec#getOutputImage(int)` object.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/MediaCodec`

Constant Value:

42
(0x0000002a)


### FLEX_RGB_888

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int FLEX_RGB_888
```

<br />

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
`https://developer.android.com/reference/android/media/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 `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/media/MediaCodec`
through `https://developer.android.com/reference/android/media/MediaCodec#getOutputImage(int)` object.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/MediaCodec`

Constant Value:

41
(0x00000029)


### HEIC

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
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.

<br />

<br />

Constant Value:

1212500294
(0x48454946)


### HEIC_ULTRAHDR

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
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.

<br />

<br />

Constant Value:

4102
(0x00001006)


### JPEG

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int JPEG
```

Compressed JPEG format.

This format is always supported as an output format for the
`https://developer.android.com/reference/android/hardware/camera2/package-summary` API, and as a picture format for the older
`https://developer.android.com/reference/android/hardware/Camera` API

<br />

<br />

Constant Value:

256
(0x00000100)


### JPEG_R

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
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](https://developer.android.com/guide/topics/media/hdr-image-format).

<br />

<br />

Constant Value:

4101
(0x00001005)


### NV16

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int NV16
```

YCbCr format, used for video.

For the `https://developer.android.com/reference/android/hardware/camera2/package-summary` API, the `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` format is
recommended for YUV output instead.

Whether this format is supported by the old camera API can be determined by
`https://developer.android.com/reference/android/hardware/Camera.Parameters#getSupportedPreviewFormats()`.

<br />

<br />

Constant Value:

16
(0x00000010)


### NV21

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int NV21
```

YCrCb format used for images, which uses the NV21 encoding format.

This is the default format
for `https://developer.android.com/reference/android/hardware/Camera` preview images, when not otherwise set with
`https://developer.android.com/reference/android/hardware/Camera.Parameters#setPreviewFormat(int)`.

For the `https://developer.android.com/reference/android/hardware/camera2/package-summary` API, the `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` format is
recommended for YUV output instead.

<br />

<br />

Constant Value:

17
(0x00000011)


### PRIVATE

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
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
`https://developer.android.com/reference/android/media/ImageWriter` , and interpreted correctly
by consumers like `https://developer.android.com/reference/android/hardware/camera2/CameraDevice` based on the device/framework private information. However,
these buffers are not directly accessible to the application.


When an `https://developer.android.com/reference/android/media/Image` of this format is obtained from
an `https://developer.android.com/reference/android/media/ImageReader` or
`https://developer.android.com/reference/android/media/ImageWriter`, the
`https://developer.android.com/reference/android/media/Image#getPlanes()` method will return an
empty `https://developer.android.com/reference/android/media/Image.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).

<br />

<br />

Constant Value:

34
(0x00000022)


### RAW10

Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int RAW10
```

<br />


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

<br />

```
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 `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 `https://developer.android.com/reference/android/media/Image` object can provide data in
this format from a `https://developer.android.com/reference/android/hardware/camera2/CameraDevice` (if
supported) through a `https://developer.android.com/reference/android/media/ImageReader` object. The
`https://developer.android.com/reference/android/media/Image#getPlanes()` will return a
single plane containing the pixel data. The pixel stride is always 0 in
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`, and the
`https://developer.android.com/reference/android/media/Image.Plane#getRowStride()` describes the vertical
neighboring pixel distance (in bytes) between adjacent rows.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

37
(0x00000025)


### RAW12

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int RAW12
```

<br />


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

<br />

```
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 `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 `https://developer.android.com/reference/android/media/Image` object can provide data in
this format from a `https://developer.android.com/reference/android/hardware/camera2/CameraDevice` (if
supported) through a `https://developer.android.com/reference/android/media/ImageReader` object. The
`https://developer.android.com/reference/android/media/Image#getPlanes()` will return a
single plane containing the pixel data. The pixel stride is always 0 in
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`, and the
`https://developer.android.com/reference/android/media/Image.Plane#getRowStride()` describes the vertical
neighboring pixel distance (in bytes) between adjacent rows.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

38
(0x00000026)


### RAW14

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int RAW14
```

<br />


Android 14-bit raw format


This is a single-plane, 14-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 four consecutive pixels are packed into 7 bytes (56 bits). The first
four bytes contain the most significant 8 bits of the first 4 pixels. The last three bytes
contain the 6 least significant bits of the four pixels, packed one after the other, the
exact layout data for each four 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\[13\] | P0\[12\] | P0\[11\] | P0\[10\] | P0\[ 9\] | P0\[ 8\] | P0\[ 7\] | P0\[ 6\] |
| Byte 1: | P1\[13\] | P1\[12\] | P1\[11\] | P1\[10\] | P1\[ 9\] | P1\[ 8\] | P1\[ 7\] | P1\[ 6\] |
| Byte 2: | P2\[13\] | P2\[12\] | P2\[11\] | P2\[10\] | P2\[ 9\] | P2\[ 8\] | P2\[ 7\] | P2\[ 6\] |
| Byte 3: | P3\[13\] | P3\[12\] | P3\[11\] | P3\[10\] | P3\[ 9\] | P3\[ 8\] | P3\[ 7\] | P3\[ 6\] |
| Byte 4: | P1\[ 1\] | P1\[ 0\] | P0\[ 5\] | P0\[ 4\] | P0\[ 3\] | P0\[ 2\] | P0\[ 1\] | P0\[ 0\] |
| Byte 5: | P2\[ 3\] | P2\[ 2\] | P2\[ 1\] | P2\[ 0\] | P1\[ 5\] | P1\[ 4\] | P1\[ 3\] | P1\[ 2\] |
| Byte 6: | P3\[ 5\] | P3\[ 4\] | P3\[ 3\] | P3\[ 2\] | P3\[ 1\] | P3\[ 0\] | P2\[ 5\] | P2\[ 4\] |


This format assumes

- a width multiple of 4 pixels
- an even height

<br />

```
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 `width * (14 / 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 * (14 / 8)`, padding
bytes will be present at the end of each row.


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

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

44
(0x0000002c)


### RAW_PRIVATE

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int RAW_PRIVATE
```

<br />

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.

<br />

<br />

Constant Value:

36
(0x00000024)


### RAW_SENSOR

Added in [API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int RAW_SENSOR
```

<br />

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 `https://developer.android.com/reference/android/hardware/camera2/CameraDevice` which produced the
image.

<br />

<br />

Constant Value:

32
(0x00000020)


### RGB_565

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int RGB_565
```

RGB format used for pictures encoded as RGB_565. See
`https://developer.android.com/reference/android/hardware/Camera.Parameters#setPictureFormat(int)`.

<br />

Constant Value:

4
(0x00000004)


### UNKNOWN

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int UNKNOWN
```

<br />

<br />

Constant Value:

0
(0x00000000)


### Y8

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int Y8
```

<br />

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 `https://developer.android.com/reference/android/graphics/ImageFormat#YV12`
format.

This format assumes

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

<br />

```
 size = stride * height 
```

For example, the `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/hardware/camera2/CameraDevice` (if
supported) through a `https://developer.android.com/reference/android/media/ImageReader` object. The
`https://developer.android.com/reference/android/media/Image#getPlanes()` will return a
single plane containing the pixel data. The pixel stride is always 1 in
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`, and the
`https://developer.android.com/reference/android/media/Image.Plane#getRowStride()` describes the vertical
neighboring pixel distance (in bytes) between adjacent rows.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

538982489
(0x20203859)


### YCBCR_P010

Added in [API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YCBCR_P010
```

<br />

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 `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`
through a `https://developer.android.com/reference/android/media/ImageReader` object if this format is
supported by `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

54
(0x00000036)


### YCBCR_P210

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YCBCR_P210
```

<br />

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 `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`
through a `https://developer.android.com/reference/android/media/ImageReader` object if this format is
supported by `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

60
(0x0000003c)


### YUV_420_888

Added in [API level 19](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YUV_420_888
```

<br />

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
`https://developer.android.com/reference/android/media/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
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`).

The U/V planes are guaranteed to have the same row stride and pixel stride
(in particular,
`https://developer.android.com/reference/android/media/Image.Plane#getRowStride()`
== `https://developer.android.com/reference/android/media/Image.Plane#getRowStride()` and
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`
== `https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`;
).

For example, the `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`
through a `https://developer.android.com/reference/android/media/ImageReader` object.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/ImageReader`
- `https://developer.android.com/reference/android/hardware/camera2/CameraDevice`

Constant Value:

35
(0x00000023)


### YUV_422_888

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YUV_422_888
```

<br />

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
`https://developer.android.com/reference/android/media/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 `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` format, the Y-plane may have a pixel
stride greater than 1 in
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`.

The U/V planes are guaranteed to have the same row stride and pixel stride
(in particular,
`https://developer.android.com/reference/android/media/Image.Plane#getRowStride()`
== `https://developer.android.com/reference/android/media/Image.Plane#getRowStride()` and
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`
== `https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`;
).

For example, the `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/media/MediaCodec`
through `https://developer.android.com/reference/android/media/MediaCodec#getOutputImage(int)` object.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/MediaCodec`

Constant Value:

39
(0x00000027)


### YUV_444_888

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YUV_444_888
```

<br />

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
`https://developer.android.com/reference/android/media/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 `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` format, the Y-plane may have a pixel
stride greater than 1 in
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`.

The U/V planes are guaranteed to have the same row stride and pixel stride
(in particular,
`https://developer.android.com/reference/android/media/Image.Plane#getRowStride()`
== `https://developer.android.com/reference/android/media/Image.Plane#getRowStride()` and
`https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`
== `https://developer.android.com/reference/android/media/Image.Plane#getPixelStride()`;
).

For example, the `https://developer.android.com/reference/android/media/Image` object can provide data
in this format from a `https://developer.android.com/reference/android/media/MediaCodec`
through `https://developer.android.com/reference/android/media/MediaCodec#getOutputImage(int)` object.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/Image`
- `https://developer.android.com/reference/android/media/MediaCodec`

Constant Value:

40
(0x00000028)


### YUY2

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YUY2
```

YCbCr format used for images, which uses YUYV (YUY2) encoding format.

For the `https://developer.android.com/reference/android/hardware/camera2/package-summary` API, the `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` format is
recommended for YUV output instead.

This is an alternative format for `https://developer.android.com/reference/android/hardware/Camera` preview images. Whether
this format is supported by the camera hardware can be determined by
`https://developer.android.com/reference/android/hardware/Camera.Parameters#getSupportedPreviewFormats()`.

<br />

<br />

Constant Value:

20
(0x00000014)


### YV12

Added in [API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int YV12
```

<br />

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

<br />

```
 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 `https://developer.android.com/reference/android/hardware/camera2/package-summary` API, the `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` format is
recommended for YUV output instead.

For the older camera API, this format is guaranteed to be supported for
`https://developer.android.com/reference/android/hardware/Camera` preview images since API level 12; for earlier API versions,
check `https://developer.android.com/reference/android/hardware/Camera.Parameters#getSupportedPreviewFormats()`.

Note that for camera preview callback use (see
`https://developer.android.com/reference/android/hardware/Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)`), the
<var translate="no">stride</var> value is the smallest possible; that is, it is equal
to:

```
stride = ALIGN(width, 16)
```

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/hardware/Camera#setPreviewCallback(android.hardware.Camera.PreviewCallback)`
- `https://developer.android.com/reference/android/hardware/Camera.Parameters#setPreviewFormat(int)`
- `https://developer.android.com/reference/android/hardware/Camera.Parameters#getSupportedPreviewFormats()`

Constant Value:

842094169
(0x32315659)


## Public constructors

### ImageFormat

```
public ImageFormat ()
```

<br />

<br />

## Public methods

### getBitsPerPixel

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static int getBitsPerPixel (int format)
```

Use this function to retrieve the number of bits per pixel of an
ImageFormat.

<br />

| Parameters ||
|---|---|
| `format` | `int`: Value is one of the following: - `https://developer.android.com/reference/android/graphics/ImageFormat#UNKNOWN` - `https://developer.android.com/reference/android/graphics/PixelFormat#RGBA_8888` - `https://developer.android.com/reference/android/graphics/PixelFormat#RGBX_8888` - `https://developer.android.com/reference/android/graphics/PixelFormat#RGB_888` - `https://developer.android.com/reference/android/graphics/ImageFormat#RGB_565` - `https://developer.android.com/reference/android/graphics/ImageFormat#YV12` - `https://developer.android.com/reference/android/graphics/ImageFormat#Y8` - `https://developer.android.com/reference/android/graphics/ImageFormat#YCBCR_P010` - `https://developer.android.com/reference/android/graphics/ImageFormat#YCBCR_P210` - `https://developer.android.com/reference/android/graphics/ImageFormat#NV16` - `https://developer.android.com/reference/android/graphics/ImageFormat#NV21` - `https://developer.android.com/reference/android/graphics/ImageFormat#YUY2` - `https://developer.android.com/reference/android/graphics/ImageFormat#JPEG` - `https://developer.android.com/reference/android/graphics/ImageFormat#DEPTH_JPEG` - `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888` - `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_422_888` - `https://developer.android.com/reference/android/graphics/ImageFormat#YUV_444_888` - `https://developer.android.com/reference/android/graphics/ImageFormat#FLEX_RGB_888` - `https://developer.android.com/reference/android/graphics/ImageFormat#FLEX_RGBA_8888` - `https://developer.android.com/reference/android/graphics/ImageFormat#RAW_SENSOR` - `https://developer.android.com/reference/android/graphics/ImageFormat#RAW_PRIVATE` - `https://developer.android.com/reference/android/graphics/ImageFormat#RAW10` - `https://developer.android.com/reference/android/graphics/ImageFormat#RAW12` - `https://developer.android.com/reference/android/graphics/ImageFormat#RAW14` - `https://developer.android.com/reference/android/graphics/ImageFormat#DEPTH16` - `https://developer.android.com/reference/android/graphics/ImageFormat#DEPTH_POINT_CLOUD` - `https://developer.android.com/reference/android/graphics/ImageFormat#PRIVATE` - `https://developer.android.com/reference/android/graphics/ImageFormat#HEIC` - `https://developer.android.com/reference/android/graphics/ImageFormat#HEIC_ULTRAHDR` - `https://developer.android.com/reference/android/graphics/ImageFormat#JPEG_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. <br /> |