# foxglove_msgs/RawImage
# A raw image

# Generated by https://github.com/foxglove/foxglove-sdk

# Timestamp of image
time timestamp

# Frame of reference for the image. The origin of the frame is the optical center of the camera. +x points to the right in the image, +y points down, and +z points into the plane of the image.
string frame_id

# Image width in pixels
uint32 width

# Image height in pixels
uint32 height

# Encoding of the raw image data. See the `data` field description for supported values.
string encoding

# Byte length of a single row. This is usually some multiple of `width` depending on the encoding, but can be greater to incorporate padding.
uint32 step

# Raw image data.
# 
# For each `encoding` value, the `data` field contains image pixel data serialized as follows:
# 
# - `yuv422` or `uyvy`:
#   - Pixel colors are decomposed into [Y'UV](https://en.wikipedia.org/wiki/Y%E2%80%B2UV) channels.
#   - Pixel channel values are represented as unsigned 8-bit integers.
#   - U and V values are shared between horizontal pairs of pixels. Each pair of output pixels is serialized as [U, Y1, V, Y2].
#   - `step` must be greater than or equal to `width` * 2.
# - `yuv422_yuy2` or  `yuyv`:
#   - Pixel colors are decomposed into [Y'UV](https://en.wikipedia.org/wiki/Y%E2%80%B2UV) channels.
#   - Pixel channel values are represented as unsigned 8-bit integers.
#   - U and V values are shared between horizontal pairs of pixels. Each pair of output pixels is encoded as [Y1, U, Y2, V].
#   - `step` must be greater than or equal to `width` * 2.
# - `nv12`:
#   - Pixel colors are decomposed into [Y'UV](https://en.wikipedia.org/wiki/Y%E2%80%B2UV) channels using 4:2:0 chroma subsampling. The data is stored in [NV12](https://www.kernel.org/doc/html/v4.10/media/uapi/v4l/pixfmt-nv12.html) semi-planar layout with two contiguous planes: a Y (luma) plane followed by an interleaved UV (chroma) plane.
#   - All channel values are represented as unsigned 8-bit integers.
#   - Both planes use `step` as their row stride.
#   - The Y plane contains one luma value per pixel (`step` * `height` bytes).
#   - The UV plane contains interleaved U, V chroma pairs, subsampled by a factor of 2 in both dimensions (`width`/2 pairs per row, `height`/2 rows, `step` * `height`/2 bytes). Each U, V pair is shared by a 2x2 block of pixels.
#   - `width` and `height` must be even.
#   - `step` must be greater than or equal to `width`.
#   - Total `data` length is `step` * `height` * 3/2 bytes.
# - `rgb8`:
#   - Pixel colors are decomposed into Red, Green, and Blue channels.
#   - Pixel channel values are represented as unsigned 8-bit integers.
#   - Each output pixel is serialized as [R, G, B].
#   - `step` must be greater than or equal to `width` * 3.
# - `rgba8`:
#   - Pixel colors are decomposed into Red, Green, Blue, and Alpha channels.
#   - Pixel channel values are represented as unsigned 8-bit integers.
#   - Each output pixel is serialized as [R, G, B, Alpha].
#   - `step` must be greater than or equal to `width` * 4.
# - `bgr8` or `8UC3`:
#   - Pixel colors are decomposed into Blue, Green, and Red channels.
#   - Pixel channel values are represented as unsigned 8-bit integers.
#   - Each output pixel is serialized as [B, G, R].
#   - `step` must be greater than or equal to `width` * 3.
# - `bgra8`:
#   - Pixel colors are decomposed into Blue, Green, Red, and Alpha channels.
#   - Pixel channel values are represented as unsigned 8-bit integers.
#   - Each output pixel is encoded as [B, G, R, Alpha].
#   - `step` must be greater than or equal to `width` * 4.
# - `32FC1`:
#   - Pixel brightness is represented as a single-channel, 32-bit little-endian IEEE 754 floating-point value, ranging from 0.0 (black) to 1.0 (white).
#   - `step` must be greater than or equal to `width` * 4.
# - `bayer_rggb8`, `bayer_bggr8`, `bayer_gbrg8`, or `bayer_grbg8`:
#   - Pixel colors are decomposed into Red, Blue and Green channels.
#   - Pixel channel values are represented as unsigned 8-bit integers, and serialized in a 2x2 bayer filter pattern.
#   - The order of the four letters after `bayer_` determine the layout, so for `bayer_wxyz8` the pattern is:
#   ```text
#   w | x
#   - + -
#   y | z
#   ```
#   - `step` must be greater than or equal to `width`.
# - `mono8` or `8UC1`:
#   - Pixel brightness is represented as unsigned 8-bit integers.
#   - `step` must be greater than or equal to `width`.
# - `mono16` or `16UC1`:
#   - Pixel brightness is represented as 16-bit unsigned little-endian integers. Rendering of these values is controlled in [Image panel color mode settings](https://docs.foxglove.dev/docs/visualization/panels/image#general).
#   - `step` must be greater than or equal to `width` * 2.
uint8[] data
