将RGB值转换为CMYK

时间:2010-06-11 22:27:29

标签: iphone objective-c cocoa-touch colors

我需要将RGB值转换为CMYK值。我正在使用iPhone SDK尝试这样做。

我尝试了几件事,但不能将值设为0或1以外的任何值,或K元素完全错误(显示为负数)。

任何帮助都可以节省生命!

抱歉,代码:

float k = MIN(1-red,MIN(1-green,1-blue));
float c = (1-red-k)/(1-k);
float m = (1-green-k)/(1-k);
float y = (1-blue-k)/(1-k);

NSLog(@"%d %d %d %d",c,m,y,k);

使用红色,绿色和蓝色的以下值:

93,37和27我得到以下值:

0 0 1073741824 1071858897

2 个答案:

答案 0 :(得分:3)

您的公式需要0到1范围内的值,但是您要为它提供0到255的更常见范围。

float k = MIN(255-red,MIN(255-green,255-blue));
float c = 255*(255-red-k)/(255-k); 
float m = 255*(255-green-k)/(255-k); 
float y = 255*(255-blue-k)/(255-k); 

当k == 255时,您还需要一个特殊情况,否则您将得到除以零。

答案 1 :(得分:0)

你有一些问题:

  1. 您正在使用1-red1-green等。这表明您的代码需要redgreenblue为{{{ 1}}和0,而非1等大整数。
  2. 93是整数的格式说明符,您正在传递%d个参数