objective-c – UIColor CMYK和Lab值
发布时间:2020-12-16 09:42:36 所属栏目:百科 来源:网络整理
导读:简单的问题,更可能是复杂的答案: 如何从UIColor对象获取CMYK和Lab值(如果有帮助,我知道RGB值)? 我发现这个有关获得CMYK值但我无法从中得到任何准确的值,尽管它无处不在,我听说它不是一个很棒的片段. CGFloat rgbComponents[4]; [color getRed:rgbComponent
简单的问题,更可能是复杂的答案:
如何从UIColor对象获取CMYK和Lab值(如果有帮助,我知道RGB值)? 我发现这个有关获得CMYK值但我无法从中得到任何准确的值,尽管它无处不在,我听说它不是一个很棒的片段. CGFloat rgbComponents[4]; [color getRed:&rgbComponents[0] green:&rgbComponents[1] blue:&rgbComponents[2] alpha:&rgbComponents[3]]; CGFloat k = MIN(1-rgbComponents[0],MIN(1-rgbComponents[1],1-rgbComponents[2])); CGFloat c = (1-rgbComponents[0]-k)/(1-k); CGFloat m = (1-rgbComponents[1]-k)/(1-k); CGFloat y = (1-rgbComponents[2]-k)/(1-k); 解决方法
对于基于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,cmykProfile,TYPE_CMYK_FLT,0); cmsCloseProfile(cmykProfile); cmsCloseProfile(rgbProfile); cmsDoTransform(xform,rgb,cmyk,1); cmsDeleteTransform(xform); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |