mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 13:51:41 +00:00
51f07145b3
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 |
||
---|---|---|
.. | ||
fuzz | ||
profiles | ||
src | ||
build.rs | ||
Cargo.toml | ||
moz.build | ||
qcms.h | ||
qcmsint.h | ||
qcmstypes.h | ||
README.md |
qcms
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.