diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 8c557bb..f710a07 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -230,6 +230,27 @@ impl MagickWand { } } + // Replaces colors in the image from a color lookup table. + pub fn clut_image( + &self, + clut_wand: &MagickWand, + method: bindings::PixelInterpolateMethod, + ) -> Result<(), &'static str> { + let result = unsafe { bindings::MagickClutImage(self.wand, clut_wand.wand, method) }; + match result { + bindings::MagickBooleanType_MagickTrue => Ok(()), + _ => Err("failed to replace colors in the image from color lookup table"), + } + } + + pub fn set_size(&self, columns: size_t, rows: size_t) -> Result<(), &'static str> { + let result = unsafe { bindings::MagickSetSize(self.wand, columns, rows) }; + match result { + bindings::MagickBooleanType_MagickTrue => Ok(()), + _ => Err("failed to set size of wand"), + } + } + /// Extend the image as defined by the geometry, gravity, and wand background color. Set the /// (x,y) offset of the geometry to move the original wand relative to the extended wand. pub fn extend_image( diff --git a/tests/lib.rs b/tests/lib.rs index 7e459c6..91482ee 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -319,3 +319,30 @@ fn test_set_background_color() { assert_eq!(0u8, blob[2]); assert_eq!(0u8, blob[3]); } + +#[test] +fn test_set_size() { + let wand = MagickWand::new(); + assert!(wand.set_size(100, 100).is_ok()); +} + +#[test] +fn test_clut_image() { + START.call_once(|| { + magick_wand_genesis(); + }); + let wand = MagickWand::new(); + assert!(wand.read_image("tests/data/IMG_5745.JPG").is_ok()); + + let mut gradient = MagickWand::new(); + assert!(gradient.set_size(128, 20).is_ok()); + assert!(gradient.set_option("gradient:angle", "90").is_ok()); + assert!(gradient.read_image("gradient:black-yellow").is_ok()); + + assert!(wand + .clut_image( + &gradient, + bindings::PixelInterpolateMethod_BilinearInterpolatePixel + ) + .is_ok()); +}