fast image operations
add raw to indexd images
bendn 2025-01-28
parent f8b7d64 · commit 71532b3
-rw-r--r--src/indexed.rs8
-rw-r--r--src/pack.rs11
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