Jos*_*ane 3 rgb objective-c cmyk uicolor lab-color-space
简单的问题,更可能是复杂的答案:
如何从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);
Run Code Online (Sandbox Code Playgroud)
对于基于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);
Run Code Online (Sandbox Code Playgroud)
转换颜色:
float rgbValues[3];
// fill rgbValues array with input values ...
float labValues[3];
cmsDoTransform(xform, rgbValues, labValues, 1);
// labValues array contains output values.
Run Code Online (Sandbox Code Playgroud)
处理颜色转换:
cmsDeleteTransform(xform);
Run Code Online (Sandbox Code Playgroud)
当然,转换只会创建一次并用于所有颜色转换.
对于RGB到CMYK转换,您也可以使用Little CMS,但您必须提供ICC配置文件,例如来自免费Adobe下载页面的一个用于Mac OS的ICC配置文件下载.
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |