logo
Expand description

Raw color types.

This module contains structs to represent the raw data used to store color information. Colors that implement the PixelColor trait can use the associated Raw type to define their raw data representation.

Specifying a Raw type for a PixelColor is required to use that color with the Image struct.

Implementing PixelColor with Raw support

This example shows how to implement a new PixelColor that can be used with images.

The RGBI color type uses 4 bits per pixel, one for each color channel and an additional intensity bit.

use embedded_graphics::{image::ImageRaw, pixelcolor::raw::RawU4, prelude::*};

/// RGBI color
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
pub struct RGBI(RawU4);

impl RGBI {
    /// Creates a RGBI color.
    pub fn new(red: bool, green: bool, blue: bool, intensity: bool) -> Self {
        let mut value = 0;

        if red {
            value |= 0b0100;
        }
        if green {
            value |= 0b0010;
        }
        if blue {
            value |= 0b0001;
        }
        if intensity {
            value |= 0b1000;
        }

        Self(RawU4::new(value))
    }
}

/// Implement `PixelColor` to associate a raw data type with the `RGBI` struct.
impl PixelColor for RGBI {
    type Raw = RawU4;
}

/// `From<RawU4>` is used by `Image` to construct RGBI colors.
impl From<RawU4> for RGBI {
    fn from(data: RawU4) -> Self {
        Self(data)
    }
}

/// Raw image data with 2 pixels per byte.
#[rustfmt::skip]
const IMAGE_DATA: &[u8] = &[
    0b0001_0010,
    0b0100_1111,
];

fn main() {
    // Create new image with RGBI colors.
    let image: ImageRaw<RGBI> = ImageRaw::new(IMAGE_DATA, 2, 2);

    // In a real application the image could now be drawn to a display:
    // display.draw(&image);
}

Structs

1 bit per pixel raw data.

2 bits per pixel raw data.

4 bits per pixel raw data.

8 bits per pixel raw data.

16 bits per pixel raw data.

24 bits per pixel raw data.

32 bits per pixel raw data.

Enums

Big endian byte order marker.

Little endian byte order marker.

Traits

Raw data byte order.

Trait implemented by all RawUx types.