pixtra 0.2.5

Pixtra aims to be a very simple and easy-to-use image manipulation tool by being opionated and contain a lot of examples
Documentation
use pixtra::canvas::Canvas;
use pixtra::pixels::Pixel;
use std::path::Path;

fn inverse(pixel: Pixel) -> Pixel {
    Pixel {
        r: u8::max_value() - pixel.r,
        g: u8::max_value() - pixel.g,
        b: u8::max_value() - pixel.b,
        a: pixel.a,
    }
}

fn unit_filter(canvas: &Canvas, x: u32, y: u32) -> Pixel {
    canvas.get_pixel(x, y)
}

fn inverse_filter(canvas: &Canvas, x: u32, y: u32) -> Pixel {
    inverse(canvas.get_pixel(x, y))
}

fn main() {
    let canvas = Canvas::load(Path::new("assets/lena.png")).unwrap();
    let filtered_canvas = canvas.filter(unit_filter);
    let inverse_canvas = canvas.filter(inverse_filter);
    let inverse_inverse_canvas = inverse_canvas.filter(inverse_filter);

    assert_eq!(canvas, inverse_inverse_canvas);
    assert_ne!(canvas, inverse_canvas);
    println!(
        "Normal and double inversed canvas are equal: {}",
        canvas == inverse_inverse_canvas
    );
    println!(
        "Normal and single inversed canvas are equal: {}",
        canvas == inverse_canvas
    );

    let _ = filtered_canvas
        .save(Path::new("filtered_canvas.png"))
        .unwrap();
    let _ = inverse_canvas
        .save(Path::new("inverse_canvas.png"))
        .unwrap();
}