count_and_replace/
count-and-replace.rs

1use pixtra::canvas::Canvas;
2use pixtra::pixels::Pixel;
3use std::path::Path;
4
5fn main() {
6    let color = Pixel {
7        r: 192,
8        g: 192,
9        b: 192,
10        a: 255,
11    };
12
13    let canvas = Canvas::load(Path::new("assets/mario-yellow.png")).unwrap();
14    let canvas_size = canvas.dimensions();
15    let find_pixel = canvas.get_pixel(canvas_size.width / 2, canvas_size.height / 2);
16    let pixel_count = canvas.count_pixels(&find_pixel);
17    println!("We found {} pixels with color {}", pixel_count, find_pixel);
18
19    let gray_canvas = canvas.clone().replace_pixel_with(&find_pixel, &color);
20    gray_canvas.save(Path::new("mario-gray.png")).unwrap();
21    let pixel_count = gray_canvas.count_pixels(&find_pixel);
22    println!("We found {} pixels with color {}", pixel_count, find_pixel);
23
24    let distance = 10.0;
25    let pixel_count = canvas.count_pixels_with_distance(&find_pixel, distance);
26    println!(
27        "We found {} pixels within {} distance of color {}",
28        pixel_count, distance, find_pixel
29    );
30    let gray_canvas_two = canvas
31        .clone()
32        .replace_pixel_with_distance(&find_pixel, distance, &color);
33
34    let pixel_count = gray_canvas_two.count_pixels_with_distance(&find_pixel, distance);
35    println!(
36        "We found {} pixels within {} distance of color {}",
37        pixel_count, distance, find_pixel
38    );
39
40    gray_canvas_two
41        .save(Path::new("mario-gray-two.png"))
42        .unwrap();
43
44    let canvas_size = canvas.dimensions();
45    let position = (canvas_size.width / 2 - 100, canvas_size.height / 2 - 100);
46    let sub_image = canvas.get_subimage(position.0, position.1, 200, 200);
47    let sub_image = sub_image.replace_pixel_with(&find_pixel, &color);
48    let canvas = canvas.set_subimage(position.0, position.1, &sub_image);
49    canvas.save(Path::new("mario-gray-subimage.png")).unwrap();
50}