vertical_and_horizontal_chunks/
vertical-and-horizontal-chunks.rs

1use pixtra::canvas::Canvas;
2use pixtra::pixels::Pixel;
3use pixtra::utility::count_colors;
4
5fn draw_filter(_: &Canvas, _: u32, y: u32) -> Pixel {
6    let y_level = (y / 10 + 1) as u8;
7    let pixel = Pixel::new(15 * y_level, 0, 0, 255);
8    pixel
9}
10
11// Slice pictures up and stitch them back together.
12fn main() {
13    let canvas = Canvas::new(100, 100);
14
15    // Let's color it.
16    let canvas = canvas.filter(draw_filter);
17    let counts = count_colors(&canvas);
18    assert_eq!(counts.len(), 10);
19    assert_eq!(counts.get(&Pixel::new(30, 0, 0, 255)), Some(&1000));
20    assert_eq!(counts.get(&Pixel::new(0, 0, 0, 0)), None);
21
22    let chunks = canvas.vertical_chunks(10);
23    for (i, chunk) in chunks.iter().enumerate() {
24        let counts = count_colors(&chunk);
25        assert_eq!(counts.len(), 1, "We are testing chunk {}", i);
26        assert_eq!(
27            counts.contains_key(&Pixel::new(((i + 1) * 15) as u8, 0, 0, 255)),
28            true,
29            "We are testing chunk {}",
30            i
31        );
32    }
33}