use crate::{CHANNELS_IN_RGB, Histogram, Pixel, PixelTransform, RawImage}; impl RawImage { pub fn record_histogram_fn(&self) -> RecordHistogram { RecordHistogram::new() } } pub struct RecordHistogram { pub histogram: Histogram, } impl RecordHistogram { fn new() -> RecordHistogram { RecordHistogram { histogram: [[0; 0x2000]; CHANNELS_IN_RGB], } } } impl PixelTransform for &mut RecordHistogram { fn apply(&mut self, pixel: Pixel) -> [u16; CHANNELS_IN_RGB] { self.histogram .iter_mut() .zip(pixel.values.iter()) .for_each(|(histogram, &value)| histogram[value as usize >> CHANNELS_IN_RGB] += 1); pixel.values } }