count_and_replace/
count-and-replace.rs1use 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}