macro_rules! rgb_image {
() => { ... };
(type: $channel_type:ty) => { ... };
($( $( [$r: expr, $g: expr, $b: expr]),*);*) => { ... };
(type: $channel_type:ty, $( $( [$r: expr, $g: expr, $b: expr]),*);*) => { ... };
}
Expand description
Helper for defining RGB images.
Pixels are delineated by square brackets, columns are
separated by commas and rows are separated by semi-colons.
By default a subpixel type of u8
is used but this can be
overridden, as shown in the examples.
ยงExamples
use image::{ImageBuffer, Rgb, RgbImage};
// An empty image with pixel type Rgb<u8>
let empty = rgb_image!();
assert_pixels_eq!(
empty,
RgbImage::from_raw(0, 0, vec![]).unwrap()
);
// A single pixel image with pixel type Rgb<u8>
let single_pixel = rgb_image!([1, 2, 3]);
assert_pixels_eq!(
single_pixel,
RgbImage::from_raw(1, 1, vec![1, 2, 3]).unwrap()
);
// A single row image with pixel type Rgb<u8>
let single_row = rgb_image!([1, 2, 3], [4, 5, 6]);
assert_pixels_eq!(
single_row,
RgbImage::from_raw(2, 1, vec![1, 2, 3, 4, 5, 6]).unwrap()
);
// An image with 2 rows and 2 columns
let image = rgb_image!(
[1, 2, 3], [ 4, 5, 6];
[7, 8, 9], [10, 11, 12]);
let equivalent = RgbImage::from_raw(2, 2, vec![
1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12
]).unwrap();
assert_pixels_eq!(image, equivalent);
// An empty image with pixel type Rgb<i16>.
let empty_i16 = rgb_image!(type: i16);
// An image with 2 rows, 3 columns and pixel type Rgb<i16>
let image_i16 = rgb_image!(type: i16,
[1, 2, 3], [4, 5, 6];
[7, 8, 9], [10, 11, 12]);
let expected_i16 = ImageBuffer::<Rgb<i16>, Vec<i16>>::from_raw(2, 2, vec![
1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12],
).unwrap();