fast image operations
Diffstat (limited to 'src/dyn/mod.rs')
-rw-r--r--src/dyn/mod.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/dyn/mod.rs b/src/dyn/mod.rs
index b86742e..184047a 100644
--- a/src/dyn/mod.rs
+++ b/src/dyn/mod.rs
@@ -1,4 +1,4 @@
-use crate::Image;
+use crate::{pixels::convert::PFrom, Image};
mod affine;
mod convert;
#[cfg(feature = "scale")]
@@ -68,6 +68,25 @@ impl<T: AsRef<[u8]>> DynImage<T> {
e!(self => |i| i.as_ref())
}
+ /// Get a pixel, of a type.
+ /// ```
+ /// # use fimg::{Image, DynImage};
+ /// let i = DynImage::Rgb(Image::alloc(50, 50));
+ /// assert_eq!(unsafe { i.pixel::<4>(25, 25) }, [0, 0, 0, 255]);
+ /// ```
+ /// # Safety
+ ///
+ /// undefined behaviour if pixel is out of bounds.
+ pub unsafe fn pixel<const P: usize>(&self, x: u32, y: u32) -> [u8; P]
+ where
+ [u8; P]: PFrom<1>,
+ [u8; P]: PFrom<2>,
+ [u8; P]: PFrom<3>,
+ [u8; P]: PFrom<4>,
+ {
+ e!(self, |i| PFrom::pfrom(unsafe { i.pixel(x, y) }))
+ }
+
/// Bytes of this image.
pub fn bytes(&self) -> &[u8] {
e!(self, |i| i.bytes())