ImageFormatpublic class ImageFormat extends Object
Fields Summary |
---|
public static final int | UNKNOWN | public static final int | RGB_565RGB 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 | NV16YCbCr 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 | NV21YCrCb 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 | YUY2YCbCr 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 | JPEGCompressed 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.
|
Methods Summary |
---|
public static int | getBitsPerPixel(int format)Use this function to retrieve the number of bits per pixel of an
ImageFormat.
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 boolean | isPublicFormat(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}.
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;
|
|