logo
Expand description

Pixel color types.

This module contains structs for commonly used pixel color formats and conversions between them. The raw module provides additional functions to convert colors to and from raw data for use with images and displays.

Implementing custom color types

Custom color types can be added by implementing the PixelColor trait. The following example shows how to implement a new color type for a 3 color EPD display.

use embedded_graphics::{
    geometry::Size, prelude::*, primitives::{Rectangle, PrimitiveStyle},
};

/// Color with 3 states.
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub enum EpdColor {
    White,
    Black,
    Red,
}

/// The `Raw` can be is set to `()` because `EpdColor` doesn't need to be
/// converted to raw data for the display and isn't stored in images.
impl PixelColor for EpdColor {
    type Raw = ();
}

/// Mock EPD display.
pub struct EpdDisplay {}

impl DrawTarget for EpdDisplay {
    type Color = EpdColor;
    type Error = core::convert::Infallible;

    fn draw_iter<I>(&mut self, pixels: I) -> Result<(), Self::Error>
    where
        I: IntoIterator<Item = Pixel<Self::Color>>,
    {
        for Pixel(point, color) in pixels.into_iter() {
            match color {
                EpdColor::White => {} // draw white pixel at `point`
                EpdColor::Black => {} // draw black pixel at `point`
                EpdColor::Red => {}   // draw red pixel at `point`
            }
        }

        Ok(())
    }
}

impl OriginDimensions for EpdDisplay {
    fn size(&self) -> Size {
        Size::new(300, 300)
    }
}

let mut display = EpdDisplay {};

Rectangle::new(Point::new(0, 0), Size::new(100, 100))
    .into_styled(PrimitiveStyle::with_fill(EpdColor::White))
    .draw(&mut display)?;

Rectangle::new(Point::new(100, 0), Size::new(100, 100))
    .into_styled(PrimitiveStyle::with_fill(EpdColor::Black))
    .draw(&mut display)?;

Rectangle::new(Point::new(200, 0), Size::new(100, 100))
    .into_styled(PrimitiveStyle::with_fill(EpdColor::Red))
    .draw(&mut display)?;

The implementation of the DrawTarget trait uses a match statement to draw the specified color and doesn’t depend on the raw data conversions, see the raw module documentation for an example that uses this feature.

Modules

Raw color types.

Structs

Bgr555 color.

Bgr565 color.

Bgr666 color.

Bgr888 color.

2 bit grayscale color.

4 bit grayscale color.

8 bit grayscale color.

Rgb555 color.

Rgb565 color.

Rgb666 color.

Rgb888 color.

Enums

Binary color.

Traits

Grayscale color.

Convert a PixelColor into its underlying storage type

Pixel color trait.

RGB color.

Named colors as defined in the CSS specification.