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