From 1752b0073c72a547da84109538de092a793a7509 Mon Sep 17 00:00:00 2001 From: 5ohue <86558263+5ohue@users.noreply.github.com> Date: Sun, 12 May 2024 22:06:10 +0300 Subject: [PATCH] Add `set_image_mask` function --- src/types/mod.rs | 2 ++ src/types/pixel_mask.rs | 22 ++++++++++++++++++++++ src/wand/magick.rs | 22 ++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/types/pixel_mask.rs diff --git a/src/types/mod.rs b/src/types/mod.rs index db5a8da..047d9b4 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -25,6 +25,7 @@ mod magick_function; mod metric_type; mod orientation_type; mod pixel_interpolate_method; +mod pixel_mask; mod rendering_intent; mod resolution_type; mod resource_type; @@ -59,6 +60,7 @@ pub use self::magick_function::MagickFunction; pub use self::metric_type::MetricType; pub use self::orientation_type::OrientationType; pub use self::pixel_interpolate_method::PixelInterpolateMethod; +pub use self::pixel_mask::PixelMask; pub use self::rendering_intent::RenderingIntent; pub use self::resolution_type::ResolutionType; pub use self::resource_type::ResourceType; diff --git a/src/types/pixel_mask.rs b/src/types/pixel_mask.rs new file mode 100644 index 0000000..52a3b4f --- /dev/null +++ b/src/types/pixel_mask.rs @@ -0,0 +1,22 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum PixelMask { + Undefined = bindings::PixelMask_UndefinedPixelMask, + Read = bindings::PixelMask_ReadPixelMask, + Write = bindings::PixelMask_WritePixelMask, + Composite = bindings::PixelMask_CompositePixelMask, +} + +impl Default for PixelMask { + fn default() -> Self { + return PixelMask::Undefined; + } +} + +impl From for bindings::PixelMask { + fn from(value: PixelMask) -> Self { + return value as bindings::PixelMask; + } +} diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 27674ca..2f8c47e 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -51,6 +51,7 @@ use crate::{ MorphologyMethod, OrientationType, PixelInterpolateMethod, + PixelMask, RenderingIntent, ResolutionType, ResourceType, @@ -1239,6 +1240,27 @@ impl MagickWand { } } + /// Sets image clip mask. + /// + /// * `pixel_mask`: type of mask, Read or Write. + /// * `clip_mask`: the clip_mask wand. + pub fn set_image_mask( + &mut self, + pixel_mask: PixelMask, + clip_mask: &MagickWand + ) -> Result<()> { + match unsafe { + bindings::MagickSetImageMask( + self.wand, + pixel_mask.into(), + clip_mask.wand + ) + } { + MagickTrue => Ok(()), + _ => Err(MagickError("failed to set image mask")), + } + } + /// Set image channel mask pub fn set_image_channel_mask( &mut self,