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"))]
use libc::ssize_t;
pub use bindings::{FilterType, GravityType};
pub use bindings::GravityType;
pub use conversions::ToMagick;
pub use result::MagickError;
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 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;

View File

@ -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());
}
}

View File

@ -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());
}