使用ICC配置文件将L * a * b *转换为RGB

时间:2013-06-06 09:35:42

标签: c++ c colors rgb color-management

我想在移动设备Android / iPhone上显示正确的颜色,因此我为每个设备创建了一个ICC配置文件。我的颜色是L * a * b *(CIELAB)格式。从L * a * b *到RGB的转换通过XYZ颜色空间,我使用来自Bruce Lindbloom's web的数学。

问题是,将XYZ转换为RGB(整个网络,不仅仅是在Lindbloom的网站上)的算法直接转换为sRGB配置文件。然后我从sRGB转换为我的设备的ICC配置文件(我使用www.color.org的'SampleICC'库)。有没有办法直接将XYZ值转换为我的设备的配置文件并跳过sRGB,最好是使用SampleICC库,还是有任何其他C / C ++库来应用ICC配置文件? ...带有文档和/或示例。我想要更好的精确度。

修改 基于@Nikita Nemkin建议我尝试使用内置Lab配置文件的小型CMS,并创建了这样的转换:

cmsHPROFILE outProfile = cmsOpenProfileFromFile("my_profile.icm", "r");
// Lab to RGB with custom ICC profile
g_LcmsTransform = cmsCreateTransform(cmsCreateLab4Profile(cmsD50_xyY()), TYPE_Lab_DBL, outProfile, TYPE_RGB_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);

这给了我一些不同的结果,然后是我以前的算法(Lab - > XYZ - > sRGB - >带有自定义ICC配置文件的RGB),使用SampleICC库,特别是对于较暗的颜色。 这部分是因为我不适应Lab中的深色 - >我的第一个算法中的XYZ转换。非常糟糕的是,这两个转换在Photoshop中转换后得到的结果不同。例如:

Lab (18, -30, 70) is sRGB (0, 54, 0)
SampleICC RGB (39, 57, 24)
SampleICC RGB with proper dark colors handling (45, 57, 24)
LittleCMS RGB (39, 54, 0)
Photoshop RGB (45, 55, 0)

所有转换都是通过相对比色意图完成的,在Photoshop中我使用了黑点补偿和Adobe引擎。我应该信任哪个号码?是否有100%可靠的软件来检查我的价值观?

1 个答案:

答案 0 :(得分:2)

Little CMS是一种流行的开源(MIT许可证)色彩管理库。它应该能够做你想做的事。