library_tests/
test_images.rs1use wolfram_library_link::{
2 self as wll, ColorSpace, Image, NumericArray, Pixel, UninitImage, UninitNumericArray,
3};
4
5
6#[wll::export]
7fn test_image_arg(image: &Image<bool>) -> NumericArray<i8> {
8 let mut array = UninitNumericArray::from_dimensions(&[image.flattened_length()]);
9
10 for pair in image
11 .as_slice()
12 .iter()
13 .zip(array.as_slice_mut().into_iter())
14 {
15 let (pixel, elem): (&i8, &mut std::mem::MaybeUninit<i8>) = pair;
16 elem.write(*pixel);
17 }
18
19 unsafe { array.assume_init() }
22}
23
24#[wll::export]
29fn test_create_bitmap_image() -> Image<bool> {
30 let width = 2;
31 let height = 2;
32 let channels = 1;
33
34 let mut image = UninitImage::<bool>::new_2d(
35 width,
36 height,
37 channels,
38 ColorSpace::Automatic,
39 false,
40 );
41
42 image.set(Pixel::D2([1, 1]), 1, false);
43 image.set(Pixel::D2([1, 2]), 1, true);
44 image.set(Pixel::D2([2, 1]), 1, true);
45 image.set(Pixel::D2([2, 2]), 1, false);
46
47 unsafe { image.assume_init() }
48}
49
50#[wll::export]
54fn test_create_color_rgb_u8_image() -> Image<u8> {
55 let width = 2;
56 let height = 2;
57 let channels = 3; let mut image: UninitImage<u8> =
60 UninitImage::new_2d(width, height, channels, ColorSpace::RGB, false);
61
62 const R: usize = 1;
64 const G: usize = 2;
65 const B: usize = 3;
66
67 image.zero();
70
71 image.set(Pixel::D2([1, 1]), R, u8::MAX);
73 image.set(Pixel::D2([1, 2]), G, u8::MAX);
74 image.set(Pixel::D2([2, 1]), B, u8::MAX);
75
76 image.set(Pixel::D2([2, 2]), R, 200);
78 image.set(Pixel::D2([2, 2]), G, 200);
79 image.set(Pixel::D2([2, 2]), B, 200);
80
81 unsafe { image.assume_init() }
82}
83
84#[wll::export]
88fn test_create_color_rgb_f32_image() -> Image<f32> {
89 let width = 2;
90 let height = 2;
91 let channels = 3; let mut image: UninitImage<f32> =
94 UninitImage::new_2d(width, height, channels, ColorSpace::RGB, false);
95
96 const R: usize = 1;
98 const G: usize = 2;
99 const B: usize = 3;
100
101 image.zero();
104
105 image.set(Pixel::D2([1, 1]), R, 1.0);
107 image.set(Pixel::D2([1, 2]), G, 1.0);
108 image.set(Pixel::D2([2, 1]), B, 1.0);
109
110 image.set(Pixel::D2([2, 2]), R, 0.8);
112 image.set(Pixel::D2([2, 2]), G, 0.8);
113 image.set(Pixel::D2([2, 2]), B, 0.8);
114
115 unsafe { image.assume_init() }
116}