use crate::consts::RNG_SEED;
use image::DynamicImage;
use rand::rngs::StdRng;
use rand::{Rng, SeedableRng};
pub fn apply_noise(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 r_noise = rng.gen_range(-amount..amount);
let g_noise = rng.gen_range(-amount..amount);
let b_noise = rng.gen_range(-amount..amount);
pixel[0] = (pixel[0] as i16 + r_noise).clamp(0, 255) as u8;
pixel[1] = (pixel[1] as i16 + g_noise).clamp(0, 255) as u8;
pixel[2] = (pixel[2] as i16 + b_noise).clamp(0, 255) as u8;
}
DynamicImage::ImageRgba8(rgba_image)
}