加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读