Add ImageType type

This commit is contained in:
5ohue
2024-05-11 14:35:10 +03:00
parent baac3cbf59
commit 1a66649c47
3 changed files with 52 additions and 2 deletions

47
src/types/image_type.rs Normal file
View File

@ -0,0 +1,47 @@
use crate::bindings;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u32)]
pub enum ImageType {
Undefined = bindings::ImageType_UndefinedType,
Bilevel = bindings::ImageType_BilevelType,
Grayscale = bindings::ImageType_GrayscaleType,
GrayscaleAlpha = bindings::ImageType_GrayscaleAlphaType,
Palette = bindings::ImageType_PaletteType,
PaletteAlpha = bindings::ImageType_PaletteAlphaType,
TrueColor = bindings::ImageType_TrueColorType,
TrueColorAlpha = bindings::ImageType_TrueColorAlphaType,
ColorSeparation = bindings::ImageType_ColorSeparationType,
ColorSeparationAlpha = bindings::ImageType_ColorSeparationAlphaType,
Optimize = bindings::ImageType_OptimizeType,
PaletteBilevelAlpha = bindings::ImageType_PaletteBilevelAlphaType,
}
impl Default for ImageType {
fn default() -> Self {
return ImageType::Undefined;
}
}
impl From<ImageType> for bindings::ImageType {
fn from(value: ImageType) -> Self {
return value as bindings::ImageType;
}
}
impl From<bindings::ImageType> for ImageType {
fn from(value: bindings::ImageType) -> Self {
/*
* SAFETY:
*
* `ImageType` has the same repr as `bindings::ImageType` - u32
*
* If `value` is less than SouthEast than it is in the vaild range and can be safely
* reinterpreted as `ImageType`
*/
if value <= bindings::ImageType_PaletteBilevelAlphaType {
return unsafe { std::mem::transmute(value) };
}
return ImageType::default();
}
}

View File

@ -7,6 +7,7 @@ mod dither_method;
mod endian_type;
mod filter_type;
mod gravity_type;
mod image_type;
mod interlace_type;
mod metric_type;
mod orientation_type;
@ -24,6 +25,7 @@ pub use self::dither_method::DitherMethod;
pub use self::endian_type::EndianType;
pub use self::filter_type::FilterType;
pub use self::gravity_type::GravityType;
pub use self::image_type::ImageType;
pub use self::interlace_type::InterlaceType;
pub use self::metric_type::MetricType;
pub use self::orientation_type::OrientationType;

View File

@ -40,6 +40,7 @@ use crate::{
EndianType,
FilterType,
GravityType,
ImageType,
InterlaceType,
MetricType,
OrientationType,
@ -1195,14 +1196,14 @@ impl MagickWand {
get_image_orientation, set_image_orientation, MagickGetImageOrientation, MagickSetImageOrientation, OrientationType
get_image_rendering_intent, set_image_rendering_intent, MagickGetImageRenderingIntent, MagickSetImageRenderingIntent, RenderingIntent
get_image_scene, set_image_scene, MagickGetImageScene, MagickSetImageScene, usize
get_image_type, set_image_type, MagickGetImageType, MagickSetImageType, bindings::ImageType
get_image_type, set_image_type, MagickGetImageType, MagickSetImageType, ImageType
get_image_units, set_image_units, MagickGetImageUnits, MagickSetImageUnits, ResolutionType
get_interlace_scheme, set_interlace_scheme, MagickGetInterlaceScheme, MagickSetInterlaceScheme, InterlaceType
get_interpolate_method, set_interpolate_method, MagickGetInterpolateMethod, MagickSetInterpolateMethod, PixelInterpolateMethod
get_iterator_index, set_iterator_index, MagickGetIteratorIndex, MagickSetIteratorIndex, isize
get_orientation, set_orientation, MagickGetOrientation, MagickSetOrientation, OrientationType
get_pointsize, set_pointsize, MagickGetPointsize, MagickSetPointsize, f64
get_type, set_type, MagickGetType, MagickSetType, bindings::ImageType
get_type, set_type, MagickGetType, MagickSetType, ImageType
);
}