我正在使用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 question有a 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)