rust_halcon/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4#![allow(dead_code)]
5
6use std::{ffi::CString, os::raw::c_char};
7
8include!("bindings.rs");
9
10fn str_to_c_char(str: &str) -> *const c_char {
11    let c_string = CString::new(str).expect("CString::new failed");
12    c_string.as_ptr() as *const c_char
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18    use std::{ffi::CString, os::raw::c_char};
19
20    #[test]
21    fn read_image_test() {
22        let mut image: Hobject = std::ptr::null_mut();
23        let file_name = "images/1.png";
24        // let file_path = PathBuf::from(file_name);
25        // if !file_path.exists() {
26        //     panic!("File does not exist: {}", file_name);
27        // }
28        let file_name_cstring = CString::new(file_name).unwrap();
29        let file_name_c_char = file_name_cstring.as_ptr();
30        let error = unsafe { read_image(&mut image, file_name_c_char) };
31        assert_eq!(error, H_MSG_OK, "Failed to read image: {}", error);
32        let mut width: Hlong = 0;
33        let mut height: Hlong = 0;
34        let error = unsafe { get_image_size(image, &mut width, &mut height) };
35        println!("width: {}, height: {}", width, height);
36        assert_eq!(error, H_MSG_OK, "Failed to get image size: {}", error);
37        assert_ne!(width, 0);
38        assert_ne!(height, 0);
39        let format_cstring = CString::new("png").unwrap();
40        let format_c_char = format_cstring.as_ptr();
41        let save_file_name = CString::new("output.png").unwrap();
42        let save_file_name_c_char = save_file_name.as_ptr();
43        let error = unsafe { write_image(image, format_c_char, 0, save_file_name_c_char) };
44        assert_eq!(error, H_MSG_OK, "Failed to write image: {}", error);
45    }
46}