Для преобразования цвета на основе ICC вы можете использовать Little Color Management System. (Я только что добавили все .c и .h файлы из архива загрузки в проект IOS Xcode Составлен и побежал следующий код без проблем.).
Примечание: RGB и CMYK являются устройством, зависит цветовые пространства, Лаборатория - это устройство независимое цветовое пространство. Поэтому для преобразования из RGB в Lab вам необходимо выбрать независимое от устройства (или «откалиброванное») цветовое пространство RGB для преобразования, например sRGB.
Little CMS поставляется со встроенными профилями для цветовых пространств sRGB и Lab. Преобразование из SRGB Лабораторию выглядит следующим образом:
Создание цветовой трансформации:
cmsHPROFILE rgbProfile = cmsCreate_sRGBProfile();
cmsHPROFILE labProfile = cmsCreateLab4Profile(NULL);
cmsHTRANSFORM xform = cmsCreateTransform(rgbProfile, TYPE_RGB_FLT, labProfile,
TYPE_Lab_FLT,
INTENT_PERCEPTUAL, 0);
cmsCloseProfile(labProfile);
cmsCloseProfile(rgbProfile);
Преобразование цветов:
float rgbValues[3];
// fill rgbValues array with input values ...
float labValues[3];
cmsDoTransform(xform, rgbValues, labValues, 1);
// labValues array contains output values.
Dispose преобразования цвета:
cmsDeleteTransform(xform);
Конечно , преобразование будет создано только один раз и будет использоваться для всех преобразований цветов.
Для преобразования RGB в CMYK вы также можете использовать Little CMS, но вы должны предоставить ICC-профиль, например. один из бесплатной страницы загрузки Adobe ICC profile downloads for Mac OS.
Пример кода для перевода в формат CMYK:
float rgb[3]; // fill with input values (range 0.0 .. 1.0)
float cmyk[4]; // output values (range 0.0 .. 100.0)
cmsHPROFILE rgbProfile = cmsCreate_sRGBProfile();
// The CMYK profile is a resource in the application bundle:
NSString *cmykProfilePath = [[NSBundle mainBundle] pathForResource:@"YourCMYKProfile.icc" ofType:nil];
cmsHPROFILE cmykProfile = cmsOpenProfileFromFile([cmykProfilePath fileSystemRepresentation], "r");
cmsHTRANSFORM xform = cmsCreateTransform(rgbProfile, TYPE_RGB_FLT, cmykProfile,
TYPE_CMYK_FLT,
INTENT_PERCEPTUAL, 0);
cmsCloseProfile(cmykProfile);
cmsCloseProfile(rgbProfile);
cmsDoTransform(xform, rgb, cmyk, 1);
cmsDeleteTransform(xform);
См http://stackoverflow.com/questions/4858131/rgb-to-cmyk-and-back-algorithm?rq=1 Это для Java, но основы применяются. – rmaddy
Я также думал, что преобразование цвета на основе ICC - это правильная вещь. Но API ColorSync недоступен в iOS (и устарел на OS X 10.6). –
@Josh Kahane: Формула преобразования цвета, которую вы вставили, можно найти по всему Интернету. Тем не менее, поскольку преобразование цвета далека от простой системы, которая может быть записана в одной формуле, результат формулы будет плохим и бесполезным. Невозможно использовать цветовые профили. – Codo