1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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])
}