Add methods to import and export pixels as f64

This commit is contained in:
5ohue
2024-05-16 18:38:04 +03:00
parent e870041015
commit b35f21cd89

View File

@ -1056,6 +1056,38 @@ impl MagickWand {
} }
} }
pub fn export_image_pixels_double(
&self,
x: isize,
y: isize,
width: usize,
height: usize,
map: &str,
) -> Option<Vec<f64>> {
let c_map = CString::new(map).unwrap();
let capacity = width * height * map.len();
let mut pixels = Vec::with_capacity(capacity);
pixels.resize(capacity, 0.0);
unsafe {
if bindings::MagickExportImagePixels(
self.wand,
x,
y,
width,
height,
c_map.as_ptr(),
bindings::StorageType_DoublePixel,
pixels.as_mut_ptr() as *mut c_void,
) == MagickTrue
{
Some(pixels)
} else {
None
}
}
}
/// 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: FilterType) -> Result<()> { pub fn resize_image(&self, width: usize, height: usize, filter: FilterType) -> Result<()> {
@ -1389,6 +1421,33 @@ impl MagickWand {
} }
} }
pub fn import_image_pixels_double(
&mut self,
x: isize,
y: isize,
columns: usize,
rows: usize,
pixels: &[f64],
map: &str,
) -> Result<()> {
let pixel_map = CString::new(map).unwrap();
match unsafe {
bindings::MagickImportImagePixels(
self.wand,
x,
y,
columns,
rows,
pixel_map.as_ptr(),
bindings::StorageType_DoublePixel,
pixels.as_ptr() as *const libc::c_void,
)
} {
MagickTrue => Ok(()),
_ => Err(MagickError("unable to import pixels")),
}
}
/// Set the wand iterator to the first image. /// Set the wand iterator to the first image.
/// See <https://imagemagick.org/api/magick-wand.php#MagickSetFirstIterator> for more information. /// See <https://imagemagick.org/api/magick-wand.php#MagickSetFirstIterator> for more information.
pub fn set_first_iterator(&self) { pub fn set_first_iterator(&self) {