fast image operations
| -rw-r--r-- | src/indexed.rs | 8 | ||||
| -rw-r--r-- | src/pack.rs | 11 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/indexed.rs b/src/indexed.rs index ac56eb6..b7e465a 100644 --- a/src/indexed.rs +++ b/src/indexed.rs @@ -46,6 +46,14 @@ impl<I, P> IndexedImage<I, P> { } } + /// Gets a mut ref to raw parts. + pub unsafe fn raw<INDEX: uint>(&mut self) -> Image<&mut [INDEX], 1> + where + I: AsMut<[INDEX]>, + { + self.buffer.as_mut() + } + /// Provides the buffer and palette of this image. pub fn into_raw_parts(self) -> (Image<I, 1>, P) { (self.buffer, self.palette) diff --git a/src/pack.rs b/src/pack.rs index 82d41bb..e9ae84a 100644 --- a/src/pack.rs +++ b/src/pack.rs @@ -3,18 +3,13 @@ use crate::pixels::convert::{PFrom, RGB, RGBA, Y, YA}; #[inline] -pub const fn pack([r, g, b, a]: [u8; 4]) -> u32 { - ((a as u32) << 24) | ((r as u32) << 16) | ((g as u32) << 8) | (b as u32) +pub const fn pack(x: [u8; 4]) -> u32 { + u32::from_le_bytes(x).rotate_left(8).swap_bytes() } #[inline] pub const fn unpack(n: u32) -> [u8; 4] { - [ - ((n >> 16) & 0xFF) as u8, - ((n >> 8) & 0xFF) as u8, - (n & 0xFF) as u8, - ((n >> 24) & 0xFF) as u8, - ] + n.rotate_left(8).to_be_bytes() } /// packs and unpacks this pixel |