diff --git a/src/luma_luma_source.rs b/src/luma_luma_source.rs index 7635f6e..1e38869 100644 --- a/src/luma_luma_source.rs +++ b/src/luma_luma_source.rs @@ -1,34 +1,40 @@ use crate::LuminanceSource; -pub struct Luma8LuminanceSource((u32, u32), (u32, u32), Vec, bool, (u32, u32)); +pub struct Luma8LuminanceSource { + dimensions: (u32, u32), + origin: (u32, u32), + data: Vec, + inverted: bool, + original_dimension: (u32, u32), +} impl LuminanceSource for Luma8LuminanceSource { fn getRow(&self, y: usize) -> Vec { - self.2 - .chunks_exact(y * self.0 .0 as usize) + self.data + .chunks_exact(y * self.dimensions.0 as usize) .skip(y) .take(1) .flatten() - .map(|byte| Self::invert_if_should(*byte, self.3)) + .map(|byte| Self::invert_if_should(*byte, self.inverted)) .collect() } fn getMatrix(&self) -> Vec { - self.2 + self.data .iter() - .map(|byte| Self::invert_if_should(*byte, self.3)) + .map(|byte| Self::invert_if_should(*byte, self.inverted)) .collect() } fn getWidth(&self) -> usize { - self.0 .0 as usize + self.dimensions.0 as usize } fn getHeight(&self) -> usize { - self.0 .1 as usize + self.dimensions.1 as usize } fn invert(&mut self) { - self.3 = !self.3; + self.inverted = !self.inverted; } fn isCropSupported(&self) -> bool { @@ -42,18 +48,24 @@ impl LuminanceSource for Luma8LuminanceSource { width: usize, height: usize, ) -> Result, crate::Exceptions> { - Ok(Box::new(Self( - (width as u32, height as u32), - (left as u32, top as u32), - self.2.clone(), - self.3, - self.4, - ))) + Ok(Box::new(Self { + dimensions: (width as u32, height as u32), + origin: (left as u32, top as u32), + data: self.data.clone(), + inverted: self.inverted, + original_dimension: self.original_dimension, + })) } } impl Luma8LuminanceSource { pub fn new(source: Vec, width: u32, height: u32) -> Self { - Self((width, height), (0, 0), source, false, (width, height)) + Self { + dimensions: (width, height), + origin: (0, 0), + data: source, + inverted: false, + original_dimension: (width, height), + } } #[inline(always)]