diff --git a/src/lib.rs b/src/lib.rs index 3c97af8..1022f56 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,7 +36,7 @@ use libc::size_t; #[cfg(not(target_os = "freebsd"))] use libc::ssize_t; -pub use bindings::{FilterType, GravityType}; +pub use bindings::GravityType; pub use conversions::ToMagick; pub use result::MagickError; use result::Result; diff --git a/src/types/filter_type.rs b/src/types/filter_type.rs new file mode 100644 index 0000000..df6c13b --- /dev/null +++ b/src/types/filter_type.rs @@ -0,0 +1,45 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum FilterType { + Undefined = bindings::FilterType_UndefinedFilter, + Point = bindings::FilterType_PointFilter, + Box = bindings::FilterType_BoxFilter, + Triangle = bindings::FilterType_TriangleFilter, + Hermite = bindings::FilterType_HermiteFilter, + Hann = bindings::FilterType_HannFilter, + Hamming = bindings::FilterType_HammingFilter, + Blackman = bindings::FilterType_BlackmanFilter, + Gaussian = bindings::FilterType_GaussianFilter, + Quadratic = bindings::FilterType_QuadraticFilter, + Cubic = bindings::FilterType_CubicFilter, + Catrom = bindings::FilterType_CatromFilter, + Mitchell = bindings::FilterType_MitchellFilter, + Jinc = bindings::FilterType_JincFilter, + Sinc = bindings::FilterType_SincFilter, + SincFast = bindings::FilterType_SincFastFilter, + Kaiser = bindings::FilterType_KaiserFilter, + Welch = bindings::FilterType_WelchFilter, + Parzen = bindings::FilterType_ParzenFilter, + Bohman = bindings::FilterType_BohmanFilter, + Bartlett = bindings::FilterType_BartlettFilter, + Lagrange = bindings::FilterType_LagrangeFilter, + Lanczos = bindings::FilterType_LanczosFilter, + LanczosSharp = bindings::FilterType_LanczosSharpFilter, + Lanczos2 = bindings::FilterType_Lanczos2Filter, + Lanczos2Sharp = bindings::FilterType_Lanczos2SharpFilter, + Robidoux = bindings::FilterType_RobidouxFilter, + RobidouxSharp = bindings::FilterType_RobidouxSharpFilter, + Cosine = bindings::FilterType_CosineFilter, + Spline = bindings::FilterType_SplineFilter, + LanczosRadius = bindings::FilterType_LanczosRadiusFilter, + CubicSpline = bindings::FilterType_CubicSplineFilter, + Sentinel = bindings::FilterType_SentinelFilter, +} + +impl From for bindings::FilterType { + fn from(value: FilterType) -> Self { + return value as bindings::FilterType; + } +} diff --git a/src/types/mod.rs b/src/types/mod.rs index e62676a..2f8541b 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -1,11 +1,13 @@ mod colorspace_type; mod composite_operator; mod dither_method; +mod filter_type; mod metric_type; mod resource_type; pub use self::colorspace_type::ColorspaceType; pub use self::composite_operator::CompositeOperator; pub use self::dither_method::DitherMethod; +pub use self::filter_type::FilterType; pub use self::metric_type::MetricType; pub use self::resource_type::ResourceType; diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 6348e1a..b63e97f 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -33,6 +33,7 @@ use crate::{ ColorspaceType, CompositeOperator, DitherMethod, + FilterType, MetricType, ResourceType }; @@ -780,9 +781,9 @@ impl MagickWand { /// Resize the image to the specified width and height, using the /// specified filter type. - pub fn resize_image(&self, width: usize, height: usize, filter: bindings::FilterType) { + pub fn resize_image(&self, width: usize, height: usize, filter: FilterType) { unsafe { - bindings::MagickResizeImage(self.wand, width as size_t, height as size_t, filter); + bindings::MagickResizeImage(self.wand, width as size_t, height as size_t, filter.into()); } } @@ -823,10 +824,10 @@ impl MagickWand { &self, x_resolution: f64, y_resolution: f64, - filter: bindings::FilterType, + filter: FilterType, ) { unsafe { - bindings::MagickResampleImage(self.wand, x_resolution, y_resolution, filter); + bindings::MagickResampleImage(self.wand, x_resolution, y_resolution, filter.into()); } } diff --git a/tests/lib.rs b/tests/lib.rs index e13fb08..9e32095 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -54,7 +54,7 @@ fn test_resize_image() { 1 => 1, height => height / 2, }; - wand.resize_image(halfwidth, halfheight, bindings::FilterType_LanczosFilter); + wand.resize_image(halfwidth, halfheight, magick_rust::FilterType::Lanczos); assert_eq!(256, wand.get_image_width()); assert_eq!(192, wand.get_image_height()); }