draw_on_flamingo/
draw-on-flamingo.rs

1use pixtra::canvas::Canvas;
2use pixtra::pixels::{ColorTrait, Colors, Pixel};
3use pixtra::utility::{diff_debug, error};
4use std::path::Path;
5
6fn find_non_zero(p: &Pixel, _x: u32, _y: u32) -> bool {
7    p.distance(&Colors::ZERO) > 4.0
8}
9
10fn main() {
11    println!("Starting");
12    let foreground = Canvas::load(Path::new("assets/flamingos.png")).unwrap();
13    let background = Canvas::load(Path::new("assets/flamingobg.jpg")).unwrap();
14
15    let result = background.draw_subimage(0, 0, &foreground);
16
17    let compare_image = Canvas::load(Path::new("assets/draw-on-example-result.png")).unwrap();
18    let diff = diff_debug(&result, &compare_image);
19    diff.save(Path::new("diff_debug_flamingo.out.png")).unwrap();
20
21    result.save(Path::new("flamingo.out.png")).unwrap();
22
23    let non_zero = diff.find_with_predicate(find_non_zero);
24    let mut diff_two = Canvas::new(400, 400);
25    for e in non_zero.iter() {
26        println!("{:?}", e);
27        diff_two.set_pixel_mut(e.coordinate.x, e.coordinate.y, &Colors::BLACK);
28    }
29    diff_two.save(Path::new("diff_two.png")).unwrap();
30    println!("Count: {}", non_zero.len());
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_blending_on_known_image() {
39        let foreground = Canvas::load(Path::new("assets/flamingos.png")).unwrap();
40        let background = Canvas::load(Path::new("assets/flamingobg.jpg")).unwrap();
41
42        let result = background.draw_subimage(0, 0, &foreground);
43
44        let compared_image = Canvas::load(Path::new("assets/draw-on-example-result.png")).unwrap();
45        let diff = diff_debug(&result, &compared_image);
46        let error_count = diff.find_with_predicate(find_non_zero).len();
47        assert_eq!(error_count, 0);
48    }
49}