Skip to main content

libeffectengine/effects/
bayer_8.rs

1use wasm_bindgen::prelude::*;
2
3use crate::effects::bayer::apply_diffusion_kernel;
4
5/// Applies Bayer dithering to a given image with the following 8x8 Bayer matrix:
6///
7/// ```
8/// | --- | --- | --- | --- | --- | --- | --- | --- |
9/// |  0  | 128 | 32  | 160 |  8  | 136 | 40  | 168 |
10/// | --- | --- | --- | --- | --- | --- | --- | --- |
11/// | 192 | 64  | 224 | 65  | 200 | 72  | 232 | 104 |
12/// | --- | --- | --- | --- | --- | --- | --- | --- |
13/// | 48  | 176 | 16  | 144 | 56  | 184 | 24  | 152 |
14/// | --- | --- | --- | --- | --- | --- | --- | --- |
15/// | 240 | 112 | 208 | 80  | 248 | 120 | 216 | 88  |
16/// | --- | --- | --- | --- | --- | --- | --- | --- |
17/// | 12  | 140 | 44  | 172 |  4  | 132 | 36  | 164 |
18/// | --- | --- | --- | --- | --- | --- | --- | --- |
19/// | 204 | 76  | 236 | 108 | 196 | 68  | 228 | 100 |
20/// | --- | --- | --- | --- | --- | --- | --- | --- |
21/// | 60  | 188 | 28  | 156 | 52  | 180 | 20  | 148 |
22/// | --- | --- | --- | --- | --- | --- | --- | --- |
23/// | 252 | 124 | 220 | 92  | 244 | 116 | 212 | 84  |
24/// | --- | --- | --- | --- | --- | --- | --- | --- |
25/// ```
26#[wasm_bindgen(js_name = bayer8)]
27pub fn effect() -> Vec<u8> {
28    let bayer_8_matrix: Vec<Vec<u8>> = vec![
29        vec![0, 128, 32, 160, 8, 136, 40, 168],
30        vec![192, 64, 224, 96, 200, 72, 232, 104],
31        vec![48, 176, 16, 144, 56, 184, 24, 152],
32        vec![240, 112, 208, 80, 248, 120, 216, 88],
33        vec![12, 140, 44, 172, 4, 132, 36, 164],
34        vec![204, 76, 236, 108, 196, 68, 228, 100],
35        vec![60, 188, 28, 156, 52, 180, 20, 148],
36        vec![252, 124, 220, 92, 244, 116, 212, 84],
37    ];
38
39    return apply_diffusion_kernel(
40        bayer_8_matrix.len(),
41        bayer_8_matrix.into_iter().flatten().collect::<Vec<u8>>(),
42    );
43}