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}