use crate::{
buffer::Buffer,
color::Rgba,
pixel,
processing::{sample, Sampler},
view,
};
impl<A, PI, CI, PO, CO> super::Scaler<PI, CI, PO, CO> for A
where
A: Sampler,
PI: Into<Rgba>,
PI: pixel::Read<CI>,
CI: pixel::Channel,
PO: From<Rgba>,
PO: pixel::Write<CO>,
CO: pixel::Channel,
{
#[inline]
fn scale(input: &view::Read<PI, CI>, width: u32, height: u32) -> Buffer<PO, CO, Vec<CO>> {
let mut tmp = Buffer::<Rgba, u8, _>::new(input.width(), height);
sample::vertically::<A, _, _, _, _, _, _>(input, &mut tmp);
let mut out = Buffer::<PO, CO, _>::new(width, height);
sample::horizontally::<A, _, _, _, _, _, _>(&tmp, &mut out);
out
}
}