1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
extern crate smallvec;
extern crate rand;
extern crate half;
// exr imports
extern crate exr;
/// Writes multiple layers into one exr file
/// Note: this may not be supported by legacy software
fn main() {
use exr::prelude::*;
let size = Vec2(512, 512);
let layer1 = Layer::new(
size,
LayerAttributes::named("teal rgb"),
Encoding::FAST_LOSSLESS,
SpecificChannels::rgb(|_pos| (0_f32, 0.4_f32, 0.4_f32)),
);
let layer2 = Layer::new(
size,
LayerAttributes::named("orange rgba"),
Encoding::FAST_LOSSLESS,
SpecificChannels::rgba(|_pos| (0.8_f32, 0.5_f32, 0.1_f32, 1.0_f32)),
);
// define the visible area of the canvas
let attributes = ImageAttributes::new(
// the pixel section that should be shown
IntegerBounds::from_dimensions(size)
);
let image = Image::empty(attributes)
.with_layer(layer1) // add an rgb layer of type `SpecificChannels<ClosureA>`
.with_layer(layer2); // add an rgba layer of different type, `SpecificChannels<ClosureB>`, not possible with a vector
println!("writing image...");
image.write().to_file("layers.exr").unwrap();
println!("created file layers.exr");
}
|