exr 1.74.1

Read and write OpenEXR files without any unsafe code
Documentation
// exr imports
extern crate exr;

/// Create an image with strange channels and write it to a file.
fn main() {
    use exr::prelude::*;

    let pixels = SpecificChannels::build()
        .with_channel("Kharthanasus Korthus")
        .with_channel("Y")
        .with_channel("11023")
        .with_channel("*?!")
        .with_channel("`--\"")
        .with_channel("\r\r\r\n\n")
        .with_pixel_fn(|position| {
            if position.0 < 1000 {
                (
                    f16::from_f32(0.2),
                    0.666_f32,
                    4_u32,
                    1532434.0213_f32,
                    0.99999_f32,
                    3.142594_f32 / 4.0,
                )
            } else {
                (
                    f16::from_f32(0.4),
                    0.777_f32,
                    8_u32,
                    102154.3_f32,
                    0.00001_f32,
                    3.142594_f32 / 4.0,
                )
            }
        });

    let image = Image::from_channels((2000, 1400), pixels);

    // print progress only if it advances more than 1%
    let mut current_progress_percentage = 0;

    image
        .write()
        .on_progress(|progress| {
            let new_progress = (progress * 100.0) as usize;
            if new_progress != current_progress_percentage {
                current_progress_percentage = new_progress;
                println!("progress: {}%", current_progress_percentage)
            }
        })
        .to_file("custom_channels.exr")
        .unwrap();

    println!("created file custom_channels.exr");
}