use crate::{observer::Observer, rgb::RgbSpace};
use nalgebra::{ArrayStorage, Matrix3};
impl Observer {
pub fn xyz2rgb_matrix(&self, rgb_space: RgbSpace) -> &'static Matrix3<f64> {
match (self, rgb_space) {
(Observer::Cie1931, RgbSpace::SRGB) => &XYZ2RGB_CIE1931_SRGB,
(Observer::Cie1931, RgbSpace::Adobe) => &XYZ2RGB_CIE1931_ADOBE,
(Observer::Cie1931, RgbSpace::DisplayP3) => &XYZ2RGB_CIE1931_DISPLAYP3,
(Observer::Cie1931, RgbSpace::CieRGB) => &XYZ2RGB_CIE1931_CIERGB,
(Observer::Cie1964, RgbSpace::SRGB) => &XYZ2RGB_CIE1964_SRGB,
(Observer::Cie1964, RgbSpace::Adobe) => &XYZ2RGB_CIE1964_ADOBE,
(Observer::Cie1964, RgbSpace::DisplayP3) => &XYZ2RGB_CIE1964_DISPLAYP3,
(Observer::Cie1964, RgbSpace::CieRGB) => &XYZ2RGB_CIE1964_CIERGB,
(Observer::Cie2015, RgbSpace::SRGB) => &XYZ2RGB_CIE2015_SRGB,
(Observer::Cie2015, RgbSpace::Adobe) => &XYZ2RGB_CIE2015_ADOBE,
(Observer::Cie2015, RgbSpace::DisplayP3) => &XYZ2RGB_CIE2015_DISPLAYP3,
(Observer::Cie2015, RgbSpace::CieRGB) => &XYZ2RGB_CIE2015_CIERGB,
(Observer::Cie2015_10, RgbSpace::SRGB) => &XYZ2RGB_CIE2015_10_SRGB,
(Observer::Cie2015_10, RgbSpace::Adobe) => &XYZ2RGB_CIE2015_10_ADOBE,
(Observer::Cie2015_10, RgbSpace::DisplayP3) => &XYZ2RGB_CIE2015_10_DISPLAYP3,
(Observer::Cie2015_10, RgbSpace::CieRGB) => &XYZ2RGB_CIE2015_10_CIERGB,
}
}
}
impl Observer {
pub fn rgb2xyz_matrix(&self, rgb_space: RgbSpace) -> &'static Matrix3<f64> {
match (self, rgb_space) {
(Observer::Cie1931, RgbSpace::SRGB) => &RGB2XYZ_CIE1931_SRGB,
(Observer::Cie1931, RgbSpace::Adobe) => &RGB2XYZ_CIE1931_ADOBE,
(Observer::Cie1931, RgbSpace::DisplayP3) => &RGB2XYZ_CIE1931_DISPLAYP3,
(Observer::Cie1931, RgbSpace::CieRGB) => &RGB2XYZ_CIE1931_CIERGB,
(Observer::Cie1964, RgbSpace::SRGB) => &RGB2XYZ_CIE1964_SRGB,
(Observer::Cie1964, RgbSpace::Adobe) => &RGB2XYZ_CIE1964_ADOBE,
(Observer::Cie1964, RgbSpace::DisplayP3) => &RGB2XYZ_CIE1964_DISPLAYP3,
(Observer::Cie1964, RgbSpace::CieRGB) => &RGB2XYZ_CIE1964_CIERGB,
(Observer::Cie2015, RgbSpace::SRGB) => &RGB2XYZ_CIE2015_SRGB,
(Observer::Cie2015, RgbSpace::Adobe) => &RGB2XYZ_CIE2015_ADOBE,
(Observer::Cie2015, RgbSpace::DisplayP3) => &RGB2XYZ_CIE2015_DISPLAYP3,
(Observer::Cie2015, RgbSpace::CieRGB) => &RGB2XYZ_CIE2015_CIERGB,
(Observer::Cie2015_10, RgbSpace::SRGB) => &RGB2XYZ_CIE2015_10_SRGB,
(Observer::Cie2015_10, RgbSpace::Adobe) => &RGB2XYZ_CIE2015_10_ADOBE,
(Observer::Cie2015_10, RgbSpace::DisplayP3) => &RGB2XYZ_CIE2015_10_DISPLAYP3,
(Observer::Cie2015_10, RgbSpace::CieRGB) => &RGB2XYZ_CIE2015_10_CIERGB,
}
}
}
static RGB2XYZ_CIE1931_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
0.41242975695540546,
0.21265288450346725,
0.01933570434620356,
],
[0.3575881732879255, 0.7151833134762361, 0.1191997668065201],
[0.18040474381802818, 0.07216380202029657, 0.9500748977598694],
]));
static XYZ2RGB_CIE1931_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[3.2406242323497025, -0.9691831623340709, 0.05564472339372577],
[-1.537196894538141, 1.8759051204307895, -0.2040730353880158],
[-0.498585967486116, 0.041547034330732424, 1.0574830641496284],
]));
static RGB2XYZ_CIE1931_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.576714240473478, 0.297359598095566, 0.02703775820726303],
[0.18555716602722555, 0.627377908608744, 0.07070179152448658],
[0.18815126756065567, 0.07526249329568993, 0.9908708191808434],
]));
static XYZ2RGB_CIE1931_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.041406344165803, -0.9691831623340708, 0.013450728892265286],
[-0.5649308009120904, 1.8759051204307895, -0.1184366196620223],
[
-0.3447221212219837,
0.041547034330732396,
1.0156551632376898,
],
]));
static RGB2XYZ_CIE1931_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
0.4866597022967488,
0.22908339817175405,
0.0001477419397538108,
],
[0.2656438033937417, 0.6916668429795408, 0.04509733263176302],
[0.19811916837086868, 0.07924975884870518, 1.0433652943410763],
]));
static XYZ2RGB_CIE1931_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.4933567145032445, -0.8298812314608864, 0.03551685759871159],
[-0.9313496355629683, 1.762966057814115, -0.07606872468968552],
[
-0.4027089332815733,
0.023674109746003747,
0.9574708524571761,
],
]));
static RGB2XYZ_CIE1931_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.4124333601256261, 0.14893721395202797, 0.0],
[0.3202328679465832, 0.8394463426804587, 0.010408985633385534],
[0.2177564459891499, 0.011616443367513348, 1.0782013832792074],
]));
static XYZ2RGB_CIE1931_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
2.8091301815192016,
-0.49847131720652077,
0.004812255725064137,
],
[
-1.0647372512644948,
1.380354814129601,
-0.013325983116021343,
],
[-0.5558680910286669, 0.08580078858334667, 0.9266421990534374],
]));
static RGB2XYZ_CIE1964_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.3697641509360967, 0.1944882593891977, 0.019166370822843396],
[0.39546626804739093, 0.7029309841017863, 0.10007329312665136],
[0.18287689662262666, 0.10258075650901596, 0.9538001474980816],
]));
static XYZ2RGB_CIE1964_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[3.8243618684678764, -1.0631956943699787, 0.03470156376962556],
[
-2.0790121057821453,
2.0227135702981864,
-0.17044712300952103,
],
[
-0.5096673519499095,
-0.013690036835883924,
1.060115668030964,
],
]));
static RGB2XYZ_CIE1964_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
0.5364881185913286,
0.28218160171467055,
0.027808348096860346,
],
[0.22123024482474418, 0.6110239201019276, 0.0522519561820725],
[0.19038895219004148, 0.10679447818340178, 0.9929795071686434],
]));
static XYZ2RGB_CIE1964_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
2.3054596583699216,
-1.0631956943699785,
-0.008617468745584058,
],
[-0.804322219368499, 2.0227135702981864, -0.08391297905377054],
[
-0.3555328930919494,
-0.013690036835883912,
1.0177472005816812,
],
]));
static RGB2XYZ_CIE1964_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.4366555878332528, 0.2126063269337179, 5.43606165782478e-6],
[0.31199124467131506, 0.6755107199536641, 0.03274201634139542],
[0.19946048310154646, 0.111882953112618, 1.0402923590445228],
]));
static XYZ2RGB_CIE1964_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.9417637538779045, -0.9307229106041585, 0.02927807060616898],
[-1.338319990808506, 1.9115400420955626, -0.06015655076330165],
[
-0.42010346700921414,
-0.027133048968860807,
0.9621244121800218,
],
]));
static RGB2XYZ_CIE1964_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.3374626729501852, 0.13100283993678755, 0.0],
[
0.39901737150539246,
0.8390024867025114,
0.0059209521293786685,
],
[
0.21162727115053656,
0.029994673360701055,
1.0671188593181975,
],
]));
static XYZ2RGB_CIE1964_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[3.631996671996747, -0.5672167677759425, 0.003147225165833953],
[
-1.7225833057290068,
1.461147610908258,
-0.008107236586251825,
],
[-0.6718663199230159, 0.0714183717481871, 0.9367064657430662],
]));
static RGB2XYZ_CIE2015_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
0.41468609931686107,
0.2188593355161146,
0.019948220581938198,
],
[0.3614723958602323, 0.6973439689489354, 0.09901919594261625],
[0.17139314176990886, 0.08379669553494994, 0.9564382233675702],
]));
static XYZ2RGB_CIE2015_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[3.303091784760495, -1.0413420804935563, 0.038917361390927975],
[-1.648638976108673, 1.971831897048809, -0.16975669840202806],
[
-0.44746933963969177,
0.01384918898709843,
1.0534448089969444,
],
]));
static RGB2XYZ_CIE2015_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.5799289050032347, 0.3060697115352649, 0.02789712444642832],
[0.18944117319453113, 0.6068146333441987, 0.05318837096892245],
[0.17818155874923633, 0.08711565512053623, 0.9943201444767737],
]));
static XYZ2RGB_CIE2015_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.065204804442671, -1.041342080493556, -0.002238702058308845],
[
-0.6170353436203074,
1.9718318970488085,
-0.08816578357254987,
],
[
-0.31602293762774986,
0.013849188987098394,
1.0138379686030894,
],
]));
static RGB2XYZ_CIE2015_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
0.49025452815924486,
0.23808347678973463,
1.3545949201321601e-5,
],
[0.27037747969543247, 0.6705286935292922, 0.03231022896613038],
[0.18691962909232487, 0.09138782968097317, 1.043081864976793],
]));
static XYZ2RGB_CIE2015_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.5258416547524343, -0.9006441025636119, 0.02786531261256865],
[-1.000910976527882, 1.8545800417307785, -0.05743398433681605],
[
-0.3649361724949475,
-0.0010909818550720117,
0.9587360559687604,
],
]));
static RGB2XYZ_CIE2015_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.4240882393968791, 0.16224333742135422, 0.0],
[
0.32634298587042454,
0.8118752677369412,
0.004556774570225986,
],
[
0.19712041167969854,
0.025881394841704566,
1.0708488653218986,
],
]));
static XYZ2RGB_CIE2015_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
2.7852718079046808,
-0.5566780024693753,
0.002368827429904523,
],
[
-1.1168472008528172,
1.4551019334932416,
-0.006191883562985807,
],
[
-0.48571593889166925,
0.06730410955094403,
0.9335521965040487,
],
]));
static RGB2XYZ_CIE2015_10_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.3675348425856119, 0.1908642818048551, 0.019348522321998084],
[0.3965204183523156, 0.7008166116600874, 0.09163600947493737],
[0.18315164065981338, 0.10831910653505754, 0.9604503037078596],
]));
static XYZ2RGB_CIE2015_10_SRGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[3.8422155512723424, -1.049929764137594, 0.022770756977617154],
[-2.1092173943493027, 2.024631792776775, -0.15067821598987913],
[
-0.4948090874721759,
-0.028122171311110764,
1.0538294634541239,
],
]));
static RGB2XYZ_CIE2015_10_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.534929871695446, 0.2777940862935522, 0.028160874464009496],
[0.221428545824432, 0.609334758392685, 0.04246128016924924],
[0.19084848407786292, 0.1128711553137628, 1.000812680871536],
]));
static XYZ2RGB_CIE2015_10_ADOBE: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.3113217821750265, -1.049929764137594, -0.02049082817658043],
[-0.8156164166708586, 2.024631792776775, -0.06294882896282702],
[
-0.3487692530012431,
-0.02812217131111077,
1.0101947845677395,
],
]));
static RGB2XYZ_CIE2015_10_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.4344835057794501, 0.20863761903068528, 9.63443711246293e-6],
[
0.31321892856966754,
0.6733719247316755,
0.025220397934524942,
],
[0.1995044672486232, 0.11799045623763911, 1.0462048031331574],
]));
static XYZ2RGB_CIE2015_10_DISPLAYP3: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[2.9540424505247698, -0.919158571928243, 0.02213054685220747],
[
-1.3587135941070276,
1.9141304990168955,
-0.04613058771915999,
],
[
-0.41008168493581787,
-0.040597108272335126,
0.9568182282608162,
],
]));
static RGB2XYZ_CIE2015_10_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[0.33074256793888746, 0.12723117683256238, 0.0],
[
0.40587018177502576,
0.8375721794937089,
0.0028703482591728685,
],
[0.21059415188382766, 0.035196643673728815, 1.068564487245622],
]));
static XYZ2RGB_CIE2015_10_CIERGB: Matrix3<f64> = Matrix3::from_array_storage(ArrayStorage([
[
3.715152594632455,
-0.5644129667873835,
0.0015161104416343664,
],
[
-1.7979799851620344,
1.4672142367977312,
-0.003941190148740152,
],
[-0.6729650456276902, 0.06290781152619453, 0.9356659748723967],
]));