use openexr_sys as sys;
use crate::{
core::{cppstd::CppString, error::Error, header::Header, DataWindowSource},
flat::flat_image::FlatImage,
};
use std::path::Path;
type Result<T, E = Error> = std::result::Result<T, E>;
pub fn save_flat_image<P: AsRef<Path>>(
filename: P,
image: &FlatImage,
) -> Result<()> {
unsafe {
let s = CppString::new(
filename
.as_ref()
.to_str()
.expect("Invalid bytes in filename"),
);
sys::Imf_saveFlatImage(s.0, image.0).into_result()?;
}
Ok(())
}
pub fn save_flat_image_with_header<P: AsRef<Path>>(
filename: P,
header: &Header,
image: &FlatImage,
data_window_source: DataWindowSource,
) -> Result<()> {
unsafe {
let s = CppString::new(
filename
.as_ref()
.to_str()
.expect("Invalid bytes in filename"),
);
sys::Imf_saveFlatImage_with_header(
s.0,
header.0.as_ref() as *const sys::Imf_Header_t,
image.0,
data_window_source.into(),
)
.into_result()?;
}
Ok(())
}
pub fn load_flat_image<P: AsRef<Path>>(filename: P) -> Result<FlatImage> {
unsafe {
let s = CppString::new(
filename
.as_ref()
.to_str()
.expect("Invalid bytes in filename"),
);
#[allow(unused_mut)]
let mut img = FlatImage::default();
sys::Imf_loadFlatImage(s.0, img.0).into_result()?;
Ok(img)
}
}