#![allow(unused)]
use crate::ImageFormat;
use crate::KinectError;
use k4a_sys_temp as k4a_sys;
use std::ptr::null_mut;
use crate::error::CreateImageError;
#[derive(Debug)]
pub struct Image(pub k4a_sys::k4a_image_t);
impl Image {
pub fn create(format: ImageFormat,
width: u32,
height: u32,
stride_bytes: u32)
-> Result<Self, CreateImageError>
{
let mut handle = null_mut();
let result = unsafe {
k4a_sys::k4a_image_create(
format as k4a_sys::k4a_image_format_t,
width as i32,
height as i32,
stride_bytes as i32,
&mut handle
)
};
if result != k4a_sys::k4a_result_t_K4A_RESULT_SUCCEEDED {
return Err(CreateImageError { error_code: result as i32 });
}
Ok(Image(handle))
}
pub fn get_height_pixels(&self) -> usize {
unsafe {
k4a_sys::k4a_image_get_height_pixels(self.0) as usize
}
}
pub fn get_width_pixels(&self) -> usize {
unsafe {
k4a_sys::k4a_image_get_width_pixels(self.0) as usize
}
}
pub fn get_stride_bytes(&self) -> usize {
unsafe {
k4a_sys::k4a_image_get_stride_bytes(self.0) as usize
}
}
pub fn get_size(&self) -> usize {
unsafe {
k4a_sys::k4a_image_get_size(self.0) }
}
pub fn get_buffer(&self) -> *mut u8 {
unsafe {
k4a_sys::k4a_image_get_buffer(self.0)
}
}
pub fn get_format(&self) -> ImageFormat {
let format = unsafe {
k4a_sys::k4a_image_get_format(self.0)
};
format.into()
}
pub fn get_handle(&self) -> k4a_sys::k4a_image_t {
self.0
}
}
impl Drop for Image {
fn drop(&mut self) {
unsafe {
k4a_sys::k4a_image_release(self.0);
}
}
}
impl Clone for Image {
fn clone(&self) -> Self {
let handle = self.get_handle();
unsafe {
k4a_sys::k4a_image_reference(handle);
}
Self {
0: handle,
}
}
fn clone_from(&mut self, source: &Self) {
let handle = source.get_handle();
unsafe {
k4a_sys::k4a_image_reference(handle);
}
unsafe {
k4a_sys::k4a_image_release(self.0);
}
self.0 = handle;
}
}