Add FilterType type

This commit is contained in:
5ohue
2024-05-09 21:48:39 +03:00
parent cfbdbd4c0e
commit 4b32edb17e
5 changed files with 54 additions and 6 deletions

View File

@ -36,7 +36,7 @@ use libc::size_t;
#[cfg(not(target_os = "freebsd"))] #[cfg(not(target_os = "freebsd"))]
use libc::ssize_t; use libc::ssize_t;
pub use bindings::{FilterType, GravityType}; pub use bindings::GravityType;
pub use conversions::ToMagick; pub use conversions::ToMagick;
pub use result::MagickError; pub use result::MagickError;
use result::Result; use result::Result;

45
src/types/filter_type.rs Normal file
View File

@ -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<FilterType> for bindings::FilterType {
fn from(value: FilterType) -> Self {
return value as bindings::FilterType;
}
}

View File

@ -1,11 +1,13 @@
mod colorspace_type; mod colorspace_type;
mod composite_operator; mod composite_operator;
mod dither_method; mod dither_method;
mod filter_type;
mod metric_type; mod metric_type;
mod resource_type; mod resource_type;
pub use self::colorspace_type::ColorspaceType; pub use self::colorspace_type::ColorspaceType;
pub use self::composite_operator::CompositeOperator; pub use self::composite_operator::CompositeOperator;
pub use self::dither_method::DitherMethod; pub use self::dither_method::DitherMethod;
pub use self::filter_type::FilterType;
pub use self::metric_type::MetricType; pub use self::metric_type::MetricType;
pub use self::resource_type::ResourceType; pub use self::resource_type::ResourceType;

View File

@ -33,6 +33,7 @@ use crate::{
ColorspaceType, ColorspaceType,
CompositeOperator, CompositeOperator,
DitherMethod, DitherMethod,
FilterType,
MetricType, MetricType,
ResourceType ResourceType
}; };
@ -780,9 +781,9 @@ impl MagickWand {
/// Resize the image to the specified width and height, using the /// Resize the image to the specified width and height, using the
/// specified filter type. /// 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 { 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, &self,
x_resolution: f64, x_resolution: f64,
y_resolution: f64, y_resolution: f64,
filter: bindings::FilterType, filter: FilterType,
) { ) {
unsafe { unsafe {
bindings::MagickResampleImage(self.wand, x_resolution, y_resolution, filter); bindings::MagickResampleImage(self.wand, x_resolution, y_resolution, filter.into());
} }
} }

View File

@ -54,7 +54,7 @@ fn test_resize_image() {
1 => 1, 1 => 1,
height => height / 2, 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!(256, wand.get_image_width());
assert_eq!(192, wand.get_image_height()); assert_eq!(192, wand.get_image_height());
} }