Я хочу отображать правильные цвета на мобильном устройстве Android / iPhone, поэтому я создал профиль ICC для каждого устройства. Мои цвета в формате L * a * b * (CIELAB). Преобразование из L * a * b * в RGB проходит через цветовое пространство XYZ, и я использую математику из Брюса Линдблума веб.
Проблема заключается в том, что алгоритм преобразования XYZ в RGB (по всей сети, а не только в сети Lindbloom) конвертирует непосредственно в профиль sRGB. Затем я конвертирую из sRGB в профиль ICC моего устройства (я использую библиотеку ‘SampleICC’ с www.color.org). Есть ли способ преобразовать значения XYZ непосредственно в профиль моего устройства и пропустить sRGB, предпочтительно с помощью библиотеки SampleICC, или есть какая-либо другая библиотека C / C ++ для применения профилей ICC? … с документацией и / или примерами. Я хочу это для большей точности.
РЕДАКТИРОВАТЬ:
Основываясь на советах @Nikita Nemkin, я попробовал небольшую CMS, где я использовал встроенный профиль Lab и создал преобразование, подобное этому:
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 я использовал компенсацию черной точки и механизм Adobe. Какой номер мне доверять? Есть ли 100% надежное программное обеспечение для проверки моих ценностей?
Маленькая CMS является популярной библиотекой управления цветом с открытым исходным кодом (лицензия MIT). Он должен быть в состоянии делать то, что вы хотите.
Других решений пока нет …