draw_on_flamingo/
draw-on-flamingo.rs1use 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}