Macro imageproc::rgba_image

source ·
macro_rules! rgba_image {
    () => { ... };
    (type: $channel_type:ty) => { ... };
    ($( $( [$r: expr, $g: expr, $b: expr, $a:expr]),*);*) => { ... };
    (type: $channel_type:ty, $( $( [$r: expr, $g: expr, $b: expr, $a: expr]),*);*) => { ... };
}
Expand description

Helper for defining RGBA 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, Rgba, RgbaImage};

// An empty image with pixel type Rgba<u8>
let empty = rgba_image!();

assert_pixels_eq!(
    empty,
    RgbaImage::from_raw(0, 0, vec![]).unwrap()
);

// A single pixel image with pixel type Rgba<u8>
let single_pixel = rgba_image!([1, 2, 3, 4]);

assert_pixels_eq!(
    single_pixel,
    RgbaImage::from_raw(1, 1, vec![1, 2, 3, 4]).unwrap()
);

// A single row image with pixel type Rgba<u8>
let single_row = rgba_image!([1, 2, 3, 10], [4, 5, 6, 20]);

assert_pixels_eq!(
    single_row,
    RgbaImage::from_raw(2, 1, vec![1, 2, 3, 10, 4, 5, 6, 20]).unwrap()
);

// An image with 2 rows and 2 columns
let image = rgba_image!(
    [1,  2,  3, 10], [ 4,  5,  6, 20];
    [7,  8,  9, 30], [10, 11, 12, 40]);

let equivalent = RgbaImage::from_raw(2, 2, vec![
    1,  2,  3, 10,  4,  5,  6, 20,
    7,  8,  9, 30, 10, 11, 12, 40
]).unwrap();

assert_pixels_eq!(image, equivalent);

// An empty image with pixel type Rgba<i16>.
let empty_i16 = rgba_image!(type: i16);

// An image with 2 rows, 3 columns and pixel type Rgba<i16>
let image_i16 = rgba_image!(type: i16,
    [1, 2, 3, 10], [ 4,  5,  6, 20];
    [7, 8, 9, 30], [10, 11, 12, 40]);

let expected_i16 = ImageBuffer::<Rgba<i16>, Vec<i16>>::from_raw(2, 2, vec![
    1, 2, 3, 10,  4,  5,  6, 20,
    7, 8, 9, 30, 10, 11, 12, 40],
    ).unwrap();