use crate::consts::RNG_SEED;
use image::DynamicImage;
use rand::rngs::StdRng;
use rand::{Rng, SeedableRng};
pub fn apply_grain(image: &DynamicImage, value: f32) -> DynamicImage {
if value <= 0.0 {
return image.clone();
}
let mut rgba_image = image.to_rgba8();
let amount = (value * 2.55) as i16; let mut rng = StdRng::seed_from_u64(RNG_SEED);
for pixel in rgba_image.pixels_mut() {
let gray_noise = rng.gen_range(-amount..amount);
pixel[0] = (pixel[0] as i16 + gray_noise).clamp(0, 255) as u8;
pixel[1] = (pixel[1] as i16 + gray_noise).clamp(0, 255) as u8;
pixel[2] = (pixel[2] as i16 + gray_noise).clamp(0, 255) as u8;
}
DynamicImage::ImageRgba8(rgba_image)
}