lightcraft/crates/pipeline/examples/develop_sheet.rs

38 lines
1.7 KiB
Rust

//! Render a few scenes with default and edited settings side by side (PNG, via the pipeline).
//! `cargo run --release -p lightcraft-pipeline --example develop_sheet -- out.png`
use lightcraft_develop::DevelopSettings;
use lightcraft_pipeline::{RenderRequest, SourceInfo, render};
fn main() {
let out = std::env::args().nth(1).unwrap_or_else(|| "develop.png".into());
let lib = lightcraft_scenes::demo_library();
let picks = [0usize, 2, 3, 6, 8, 5];
let (cw, ch) = (420usize, 280usize);
let mut sheet = image::RgbImage::new((cw * 2) as u32, (ch * picks.len()) as u32);
for (row, &i) in picks.iter().enumerate() {
let src = lib[i].render_fit(900);
let mut edited = DevelopSettings::default();
edited.light.shadows = 45.0;
edited.light.highlights = -55.0;
edited.light.contrast = 15.0;
edited.effects.clarity = 25.0;
edited.effects.dehaze = 12.0;
edited.color.vibrance = 30.0;
edited.vignette.amount = -25.0;
edited.grading.shadows = lightcraft_develop::Wheel { hue: 210.0, sat: 18.0, lum: 0.0 };
edited.grading.highlights = lightcraft_develop::Wheel { hue: 40.0, sat: 14.0, lum: 0.0 };
for (col, s) in [DevelopSettings::default(), edited].iter().enumerate() {
let r = render(&src, &SourceInfo::default(), s, &RenderRequest::fit(cw, ch)).image;
let (ox, oy) = (col * cw + (cw - r.width) / 2, row * ch + (ch - r.height) / 2);
for y in 0..r.height {
for x in 0..r.width {
let p = r.get(x, y);
sheet.put_pixel((ox + x) as u32, (oy + y) as u32, image::Rgb([p[0], p[1], p[2]]));
}
}
}
}
sheet.save(&out).unwrap();
println!("{out}");
}