diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 14fc53e..f710a07 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -230,6 +230,19 @@ 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 { diff --git a/tests/lib.rs b/tests/lib.rs index 2a7bacc..91482ee 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -325,3 +325,24 @@ 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()); +}