c – 像油漆一样添加颜色(颜色)(蓝色黄色=绿色等)

前端之家收集整理的这篇文章主要介绍了c – 像油漆一样添加颜色(颜色)(蓝色黄色=绿色等)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用cocos2d库制作iOS游戏.

假设您有两个具有两种不同颜色的对象 – 以RGB格式定义

Blue:    0,255
Yellow:  255,255,0

我想添加蓝色和黄色来制作绿色.

为了使事情复杂化,让我们说Blue对象比Yellow对象更大(为了说明,我们说比例为2:1),我加入的蓝色是黄色的两倍 – 我如何计算这个新的(浅绿色)颜色正确.

我理解LAB * Color Space对于这种“自然色”的东西很有用,但我不知道如何使用它 – 特别是在cocos2d对象的上下文中,(AFAIK)仅限于在其中使用RGB配色方案.

我真的很感激如何实现这一点的实际帮助.谢谢堆!

21/4更新:所以在LAB *中蓝色黄色≠绿色(当你看到they’re at opposite ends of the same channel时这是有意义的).关于SO的讨论little bit实际上是一个非常棘手的问题.似乎最终的答案是使用Kubelka-Munk方法,即一种名为Krita的开源软件.我找不到任何地方(公式或代码本身).

This questiona link,它使用HSL以类似的方法进行绘画.我将尝试查看它是否有效,我将在此处反馈结果.

在此期间if anyone knows how to implement Kubelka-Munk或者我可以找到执行此操作的代码或其他解决方案,我会非常非常激动!

解决方法

没有颜色模型混合蓝色和黄色使绿色.用水粉自己尝试一下,它唯一的工作方式是青色和黄色.这就是为什么你应该尝试从RGB切换到CMYK,如果需要,可以返回.这是如何完成的
void toCMYK(float red,float green,float blue,float* cmyk)
{
  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); 

  cmyk[0] = c;
  cmyk[1] = m;
  cmyk[2] = y;
  cmyk[3] = k;
}

void toRGB(float c,float m,float y,float k,float *rgb)
{
  rgb[0] = -((c * (255-k)) / 255 + k - 255);
  rgb[1] = -((m * (255-k)) / 255 + k - 255);
  rgb[2] = -((y * (255-k)) / 255 + k - 255);
}

然后在您的代码中,混合青色和黄色

float cmyk1[4];
toCMYK(255,cmyk1);  // yellow

float cmyk2[4];
toCMYK(0,cmyk2);  // cyan

// Mixing colors is as simple as adding
float cmykMix[] = { cmyk1[0] + cmyk2[0],cmyk1[1] + cmyk2[1],cmyk1[2] + cmyk2[2],cmyk1[3] + cmyk2[3] };

float rgb[3];
toRGB(cmykMix[0],cmykMix[1],cmykMix[2],cmykMix[3],rgb);  

NSLog(@"RGB mix = (%f,%f,%f)",rgb[0],rgb[1],rgb[2]);

运行代码将产生:RGB mix =(0.000000,255.000000,0.000000)

猜你在找的C&C++相关文章