use imgref::{ImgRef, ImgVec};
use crate::{Histogram, RgbaPixel};
pub(crate) fn visualize(
reference: ImgRef<'_, RgbaPixel>,
raw_diff_image: ImgRef<'_, u8>,
histogram: &Histogram,
) -> ImgVec<RgbaPixel> {
debug_assert_eq!(
(reference.width(), reference.height()),
(raw_diff_image.width() + 2, raw_diff_image.height() + 2)
);
let max_difference = f64::from(histogram.max_difference());
crate::image::from_fn(raw_diff_image.width(), raw_diff_image.height(), |x, y| {
let reference_value = crate::image::rgba_to_luma(reference[(x + 1, y + 1)]);
let raw_diff_value = raw_diff_image[(x, y)];
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)]
let amplified_difference = (f64::from(raw_diff_value) / max_difference * 255.0) as u8;
[
reference_value / 3,
amplified_difference,
amplified_difference,
255,
]
})
}