Skip to main content

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}