Revert "optimize rot90c"

This reverts commit e2002f18b4.
This commit is contained in:
bendn 2023-11-06 19:39:11 +07:00
parent e2002f18b4
commit 659b65d829
No known key found for this signature in database
GPG key ID: 0D9D3A2A3B2A93D6

View file

@ -105,18 +105,11 @@ impl<const CHANNELS: usize> ImageCloner<'_, CHANNELS> {
/// UB if the image is not square /// UB if the image is not square
#[must_use = "function does not modify the original image"] #[must_use = "function does not modify the original image"]
pub unsafe fn rot_90(&self) -> Image<Vec<u8>, CHANNELS> { pub unsafe fn rot_90(&self) -> Image<Vec<u8>, CHANNELS> {
let mut o = self.alloc(); // SAFETY: yep
for y in 0..self.height() { let mut out = unsafe { transpose_out(self) };
for x in 0..self.width() { // SAFETY: sqar
// SAFETY: x and y in bounds, slice is okay unsafe { crev(out.as_mut()) };
unsafe { out
let px = self.buffer.get_unchecked(self.slice(x, y));
let out = o.pixel_mut(self.height() - y - 1, x);
out.copy_from_slice(px);
}
}
}
o
} }
/// Rotate an image 270 degrees clockwise, or 90 degrees anti clockwise. /// Rotate an image 270 degrees clockwise, or 90 degrees anti clockwise.
@ -163,6 +156,26 @@ impl<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>> Image<T, CHANNELS> {
} }
} }
/// Reverse columns of square image
/// # Safety
///
/// UB if supplied image not square
unsafe fn crev<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>>(mut img: Image<T, CHANNELS>) {
debug_assert_eq!(img.width(), img.height());
let size = img.width() as usize;
let b = img.flatten_mut();
for i in 0..size {
let mut start = 0;
let mut end = size - 1;
while start < end {
// SAFETY: hmm
unsafe { b.swap_unchecked(i * size + start, i * size + end) };
start += 1;
end -= 1;
}
}
}
/// Transpose a square image out of place /// Transpose a square image out of place
/// # Safety /// # Safety
/// ///