1 个不稳定版本
0.1.0 | 2020年4月1日 |
---|
#8 in #icc
190KB
4.5K SLoC
rcms
一个 ICC 颜色管理库;高度基于 Little CMS。
目前实现较少,容易因 todo!()
而崩溃。
此库将做什么
- 读取和写入 ICC 配置文件
- 创建管道以在配置文件之间转换颜色
此库不会做什么
- 高效转换大像素数组
- 处理像素格式
为了便于在 GPU 上进行颜色转换的替代实现,所有管道内部都在 API 中公开。
lib.rs
:
颜色管理库。
高度基于 Little CMS。
示例
将颜色从 sRGB 转换为 Display P3
有关链接颜色配置文件的详细信息,请参阅 link
。
let srgb_profile = IccProfile::new_srgb();
let p3_profile = IccProfile::new_display_p3();
// a light-bluish color in sRGB
// colors are represented as arrays of floating-point numbers, usually in the range
// from 0 to 1.
let some_color = [0.3, 0.5, 0.9];
// create a transform from sRGB to Display P3
let transform_pipeline = link(
&[&srgb_profile, &p3_profile],
&[Intent::Perceptual, Intent::Perceptual],
&[false, false],
&[0., 0.],
).expect("failed to create color transform");
// this array will hold the output color in Display P3
let mut out_color = [0.; 3];
transform_pipeline.transform(&some_color, &mut out_color);
// reference values from ColorSync
let out_reference: [f64; 3] = [0.3462, 0.4949, 0.8724];
// check that apart from floating point inaccuracies, the output color is correct
assert!((out_color[0] - out_reference[0]).abs() < 1e-3);
assert!((out_color[1] - out_reference[1]).abs() < 1e-3);
assert!((out_color[2] - out_reference[2]).abs() < 1e-3);
依赖关系
~3.5MB
~71K SLoC