rawshift_image/data/
icc.rs1pub const PCS_WHITEPOINT: [f64; 3] = [0.9505, 1.0000, 1.0890];
10
11pub const SRGB_PRIMARIES: [[f64; 2]; 3] = [
15 [0.6400, 0.3300], [0.3000, 0.6000], [0.1500, 0.0600], ];
19
20pub const SRGB_TO_XYZ_D65: [f64; 9] = [
22 0.4124564, 0.3575761, 0.1804375, 0.2126729, 0.7151522, 0.0721750, 0.0193339, 0.1191920,
23 0.9503041,
24];
25
26pub const XYZ_D65_TO_SRGB: [f64; 9] = [
28 3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259,
29 1.0572252,
30];
31
32pub const ADOBE_RGB_PRIMARIES: [[f64; 2]; 3] = [
34 [0.6400, 0.3300], [0.2100, 0.7100], [0.1500, 0.0600], ];
38
39pub const BRADFORD_D65_TO_D50: [f64; 9] = [
44 1.0478112, 0.0228866, -0.0501270, 0.0295424, 0.9904844, -0.0170491, -0.0092345, 0.0150436,
45 0.7521316,
46];
47
48pub const BRADFORD_D50_TO_D65: [f64; 9] = [
50 0.9555766, -0.0230393, 0.0631636, -0.0282895, 1.0099416, 0.0210077, 0.0122982, -0.0204830,
51 1.3299098,
52];
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn test_srgb_matrix_identity_white() {
60 let xyz = [0.9505, 1.0000, 1.0890]; let r =
63 XYZ_D65_TO_SRGB[0] * xyz[0] + XYZ_D65_TO_SRGB[1] * xyz[1] + XYZ_D65_TO_SRGB[2] * xyz[2];
64 assert!(r > 0.0 && r < 2.0);
66 }
67
68 #[test]
69 fn test_bradford_roundtrip() {
70 let input = [0.5, 0.6, 0.7];
72 let mid = [
74 BRADFORD_D65_TO_D50[0] * input[0]
75 + BRADFORD_D65_TO_D50[1] * input[1]
76 + BRADFORD_D65_TO_D50[2] * input[2],
77 BRADFORD_D65_TO_D50[3] * input[0]
78 + BRADFORD_D65_TO_D50[4] * input[1]
79 + BRADFORD_D65_TO_D50[5] * input[2],
80 BRADFORD_D65_TO_D50[6] * input[0]
81 + BRADFORD_D65_TO_D50[7] * input[1]
82 + BRADFORD_D65_TO_D50[8] * input[2],
83 ];
84 let output = [
86 BRADFORD_D50_TO_D65[0] * mid[0]
87 + BRADFORD_D50_TO_D65[1] * mid[1]
88 + BRADFORD_D50_TO_D65[2] * mid[2],
89 BRADFORD_D50_TO_D65[3] * mid[0]
90 + BRADFORD_D50_TO_D65[4] * mid[1]
91 + BRADFORD_D50_TO_D65[5] * mid[2],
92 BRADFORD_D50_TO_D65[6] * mid[0]
93 + BRADFORD_D50_TO_D65[7] * mid[1]
94 + BRADFORD_D50_TO_D65[8] * mid[2],
95 ];
96 for i in 0..3 {
97 assert!(
98 (output[i] - input[i]).abs() < 1e-4,
99 "roundtrip failed at index {i}: {:.6} != {:.6}",
100 output[i],
101 input[i]
102 );
103 }
104 }
105}