sic_image_engine/operations/
invert.rs1use crate::errors::SicImageEngineError;
2use crate::operations::ImageOperation;
3use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator};
4use sic_core::{SicImage, image};
5
6pub struct Invert;
7
8impl Invert {
9 pub fn new() -> Self {
10 Self {}
11 }
12}
13
14impl ImageOperation for Invert {
15 fn apply_operation(&self, image: &mut SicImage) -> Result<(), SicImageEngineError> {
16 match image {
17 SicImage::Static(image) => image.invert(),
18 SicImage::Animated(image) => invert_animated_image(image.frames_mut()),
19 }
20
21 Ok(())
22 }
23}
24
25fn invert_animated_image(frames: &mut [image::Frame]) {
26 frames.par_iter_mut().for_each(|frame| {
27 image::imageops::invert(frame.buffer_mut());
28 });
29}