tcolour 0.1.0

A colour library aimed at use with Ratatui.
Documentation
pub mod colour;
pub mod gradient;

pub use colour::*;
pub use gradient::*;

#[cfg(test)]
mod tests {
    use color_eyre::eyre::Result;
    use image::{
        DynamicImage, GenericImageView, ImageFormat, Rgba, RgbaImage
    };

    use crate::{BlendMode, Colour};

    #[test]
    pub fn blend_test() -> Result<()> {
        use image::ImageReader;

        let cat = ImageReader::open("test/cat.jpg")?.decode()?;
        let bricks = ImageReader::open("test/bricks.png")?.decode()?;
        let get_colours = |image: &DynamicImage| -> Vec<Colour> {
            image
                .pixels()
                .map(|(_, _, pixel)| {
                    Colour::from_u8_rgba(pixel.0[0], pixel.0[1], pixel.0[2], pixel.0[3])
                })
                .collect()
        };

        let brick_colours = get_colours(&bricks);
        let mut cat_colours = get_colours(&cat);
        cat_colours = cat_colours.iter().map(|f| f.with_alpha(1.0)).collect();
        let mut blended_image = RgbaImage::new(512, 512);

        for (index, (base, blend)) in brick_colours.iter().zip(cat_colours).enumerate() {
            let x = index as u32 % 512;
            let y = index as u32 / 512;
            blended_image.put_pixel(x, y, Rgba(base.blend(blend, BlendMode::Darken).into()));
        }
        blended_image.save_with_format("test/blended.png", ImageFormat::Png)?;
        Ok(())
    }
}