3

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

问题是,将 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 -> RGB 和自定义 ICC 配置文件)使用 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 中我使用了黑点补偿和 Adob​​e 引擎。我应该相信哪个号码?是否有任何 100% 可靠的软件来检查我的价值观?

4

1 回答 1

2

Little CMS is a popular open-source (MIT license) color management library. It should be able to do what you want.

于 2013-06-06T10:14:20.417 回答