fast image operations
| -rw-r--r-- | src/scale/algorithms.rs | 2 | ||||
| -rw-r--r-- | src/scale/traits.rs | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/scale/algorithms.rs b/src/scale/algorithms.rs index d1dd6cf..55a71d2 100644 --- a/src/scale/algorithms.rs +++ b/src/scale/algorithms.rs @@ -75,6 +75,8 @@ macro_rules! alg { .resize(&ChannelCount::<N>::handle(i).view(), &mut dst.view_mut()) } + ChannelCount::<N>::unhandle(&mut dst); + // SAFETY: ctor unsafe { Image::new(dst.width(), dst.height(), dst.into_vec().into()) } } diff --git a/src/scale/traits.rs b/src/scale/traits.rs index 66d1ddb..68c2b16 100644 --- a/src/scale/traits.rs +++ b/src/scale/traits.rs @@ -49,6 +49,8 @@ pub trait AlphaDiv<const N: usize>: Sealed + ToImageView<N> { type P: fr::PixelExt + fr::Convolution + fr::AlphaMulDiv; #[doc(hidden)] fn handle(i: Image<&mut [u8], N>) -> fr::Image<'_, <Self as AlphaDiv<N>>::P>; + #[doc(hidden)] + fn unhandle(i: &mut fr::Image<<Self as AlphaDiv<N>>::P>); } /// Generic helper for [`Image`] and [`fr::Image`] transfers. @@ -83,6 +85,11 @@ macro_rules! adiv { i } + + fn unhandle(i: &mut fr::Image<<Self as AlphaDiv<$n>>::P>) { + // SAFETY: mhm + unsafe { fr::MulDiv::default().divide_alpha_inplace(&mut i.view_mut()) } + } } }; } |