diff options
Diffstat (limited to 'vendor/exr/examples/1a_write_rgba_with_metadata.rs')
-rw-r--r-- | vendor/exr/examples/1a_write_rgba_with_metadata.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/vendor/exr/examples/1a_write_rgba_with_metadata.rs b/vendor/exr/examples/1a_write_rgba_with_metadata.rs new file mode 100644 index 0000000..394410f --- /dev/null +++ b/vendor/exr/examples/1a_write_rgba_with_metadata.rs @@ -0,0 +1,64 @@ + +// exr imports +extern crate exr; + +/// Write an rgba exr file, generating the pixel values on the fly. +/// This streams the generated pixel directly to the file, +/// never allocating the actual total pixel memory of the image. +fn main() { + use exr::prelude::*; + use exr::meta::attribute::*; + + // this function can generate a color for any pixel + let generate_pixels = |position: Vec2<usize>| ( + position.x() as f32 / 2048.0, // red + position.y() as f32 / 2048.0, // green + 1.0 - (position.y() as f32 / 2048.0), // blue + 1.0 // alpha + ); + + let mut layer_attributes = LayerAttributes::named("generated rgba main layer"); + layer_attributes.comments = Some(Text::from("This image was generated as part of an example")); + layer_attributes.owner = Some(Text::from("The holy lambda function")); + layer_attributes.software_name = Some(Text::from("EXRS Project")); + layer_attributes.exposure = Some(1.0); + layer_attributes.focus = Some(12.4); + layer_attributes.frames_per_second = Some((60, 1)); + layer_attributes.other.insert( + Text::from("Layer Purpose (Custom Layer Attribute)"), + AttributeValue::Text(Text::from("This layer contains the rgb pixel data")) + ); + + let layer = Layer::new( + (2*2048, 2*2048), + layer_attributes, + Encoding::SMALL_FAST_LOSSLESS, // use fast but lossy compression + + SpecificChannels::rgba(generate_pixels) + ); + + // crop away black and transparent pixels from the border, if any + let layer = layer + .crop_where_eq((0.0, 0.0, 0.0, 0.0)) + .or_crop_to_1x1_if_empty(); + + let mut image = Image::from_layer(layer); + image.attributes.pixel_aspect = 1.0; + + image.attributes.time_code = Some(TimeCode { + hours: 0, + minutes: 1, + seconds: 59, + frame: 29, + ..TimeCode::default() + }); + + image.attributes.other.insert( + Text::from("Mice Count (Custom Image Attribute)"), + AttributeValue::I32(23333) + ); + + // write it to a file with all cores in parallel + image.write().to_file("generated_rgba_with_meta.exr").unwrap(); + println!("created file generated_rgba_with_meta.exr"); +}
\ No newline at end of file |