Я хочу отображать правильные цвета на мобильном устройстве 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% надежное программное обеспечение для проверки моих ценностей?