对于基于ICC的颜色转换,您可以使用
Little Color Management System。(我刚刚将下载存档中的所有.c和.h文件添加到了iOS Xcode项目中。它编译并运行以下代码没有问题。)
注:RGB和CMYK是设备相关的颜色空间,而Lab是设备无关的颜色空间。因此,要将RGB转换为Lab,必须选择设备无关(或“校准”)的RGB颜色空间进行转换,例如sRGB。
Little CMS带有sRGB和Lab颜色空间的内置配置文件。从sRGB到Lab的转换如下所示:
创建一个颜色转换:
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.
处理颜色转换:
cmsDeleteTransform(xform);
当然,这个转换只需要创建一次,就可以用于所有的颜色转换。
对于RGB到CMYK的转换,您也可以使用Little CMS,但您必须提供一个ICC文件,例如从免费的Adobe下载页面
ICC profile downloads for Mac OS中下载一个。
RGB到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);