use super::DataType;
use super::Result;
use libopenraw_sys as ffi;
pub struct Thumbnail(pub(crate) ffi::ORThumbnailRef);
impl Thumbnail {
pub fn new() -> Self {
Self(unsafe { ffi::or_thumbnail_new() })
}
pub fn get_data_size(&self) -> usize {
unsafe { ffi::or_thumbnail_data_size(self.0) }
}
pub fn get_data(&self) -> Result<&[u8]> {
let d = unsafe { ffi::or_thumbnail_data(self.0) as *const u8 };
if d.is_null() {
return Err(super::Error::NotFound);
}
let size = self.get_data_size();
Ok(unsafe { std::slice::from_raw_parts(d, size) })
}
pub fn get_format(&self) -> DataType {
unsafe { ffi::or_thumbnail_format(self.0) }.into()
}
pub fn get_dimensions(&self) -> (u32, u32) {
let mut x = 0u32;
let mut y = 0u32;
unsafe { ffi::or_thumbnail_dimensions(self.0, &mut x, &mut y) };
(x, y)
}
}
impl Default for Thumbnail {
fn default() -> Self {
Self::new()
}
}
impl Drop for Thumbnail {
fn drop(&mut self) {
unsafe { ffi::or_thumbnail_release(self.0) };
}
}