purrmitive 0.2.0

Reproducing images with geometric primitives.
Documentation
pub mod core;
pub mod graphics;

pub use image::*;

fn clamp<T: std::cmp::PartialEq + std::cmp::PartialOrd>(a: T, low: T, high: T) -> T {
    if a < low {
        return low;
    }
    if a > high {
        return high;
    }
    a
}

fn degrees(radians: f64) -> f64 {
    return radians * 180.0 / std::f64::consts::PI;
}

pub fn alpha_compose(bg: &Rgba<u8>, fg: &Rgba<u8>) -> Rgba<u8> {
    let alpha_f = fg.0[3] as f64 / 255.0;
    let r = (bg.0[0] as f64 * (1.0 - alpha_f) + fg.0[0] as f64 * alpha_f) as u8;
    let g = (bg.0[1] as f64 * (1.0 - alpha_f) + fg.0[1] as f64 * alpha_f) as u8;
    let b = (bg.0[2] as f64 * (1.0 - alpha_f) + fg.0[2] as f64 * alpha_f) as u8;
    Rgba([r, g, b, 255])
}