libeffectengine/effects/bayer_4.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 4x4 Bayer matrix:
6///
7/// ```
8/// | --- | --- | --- | --- |
9/// | 0 | 128 | 32 | 160 |
10/// | --- | --- | --- | --- |
11/// | 192 | 64 | 224 | 65 |
12/// | --- | --- | --- | --- |
13/// | 48 | 176 | 16 | 144 |
14/// | --- | --- | --- | --- |
15/// | 240 | 112 | 208 | 80 |
16/// | --- | --- | --- | --- |
17/// ```
18#[wasm_bindgen(js_name = bayer4)]
19pub fn effect() -> Vec<u8> {
20 let bayer_4_matrix: Vec<Vec<u8>> = vec![
21 vec![0, 128, 32, 160],
22 vec![192, 64, 224, 96],
23 vec![48, 176, 16, 144],
24 vec![240, 112, 208, 80],
25 ];
26
27 return apply_diffusion_kernel(
28 bayer_4_matrix.len(),
29 bayer_4_matrix.into_iter().flatten().collect::<Vec<u8>>(),
30 );
31}