gecko-dev/gfx/qcms
Jeff Muizelaar 51f07145b3 Bug 1697858 - Use an additional src profile when fuzzing. r=aosmond
Only using sRGB will limit the gamut of XYZ that we explore
which seems to prevent us from finding bug 1697787. Also using the
identity XYZD50 profile should hopefully fix that.

Differential Revision: https://phabricator.services.mozilla.com/D108060
2021-03-11 18:45:05 +00:00
..
fuzz Bug 1697858 - Use an additional src profile when fuzzing. r=aosmond 2021-03-11 18:45:05 +00:00
profiles Bug 1679621. Add a test for v4 output. r=aosmond 2020-11-30 22:50:40 +00:00
src Bug 1697595 - Profile doesn't need to be #[repr(C)]. r=aosmond 2021-03-11 00:21:45 +00:00
build.rs
Cargo.toml Bug 1685214 - Add some documentation to qcms and bump the crate version. r=aosmond 2021-01-06 01:36:30 +00:00
moz.build
qcms.h
qcmsint.h
qcmstypes.h
README.md Bug 1685311 - Flesh out the documentation a little. r=aosmond 2021-01-06 17:11:21 +00:00

qcms

Crates.io Documentation

Firefox's library for transforming image data between ICC profiles.

Example

    // Decode the jpeg
    let mut d = jpeg_decoder::Decoder::new(std::fs::File::open("/Users/jrmuizel/Desktop/DSCF2460.jpg").unwrap());
    let mut data = d.decode().unwrap();
    let info = d.info().unwrap();

    // Extract the profile after decode
    let profile = d.icc_profile().unwrap();

    // Create a new qcms Profile
    let input = qcms::Profile::new_from_slice(&profile).unwrap();
    let mut output = qcms::Profile::new_sRGB();
    output.precache_output_transform();

    // Create a transform between input and output profiles and apply it.
    let xfm = qcms::Transform::new(&input, &output, qcms::DataType::RGB8, qcms::Intent::default()).unwrap();
    xfm.apply(&mut data);

    // write the result to a PNG
    let mut encoder = png::Encoder::new(std::fs::File::create("out.png").unwrap(), info.width as u32, info.height as u32);
    encoder.set_color(png::ColorType::Rgb);
    encoder.set_srgb(png::SrgbRenderingIntent::Perceptual);
    let mut writer = encoder.write_header().unwrap();
    writer.write_image_data(&data).unwrap(); // Save

This library was originally written in C, was converted to Rust using c2rust, and then refactored to be mostly safe and more idiomatic Rust.