gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:41 30 4
gpt4 key购买 nike

我正在使用 cocos2d 库制作 iOS 游戏。

假设您有两个具有两种不同颜色的对象 - 在 RGB 中定义为

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

我想添加蓝色和黄色来变成绿色。

为了使事情过于复杂,假设蓝色对象比黄色对象大(为了论证,假设比例为 2:1),我添加的蓝色是黄色的两倍 - 如何我正确计算了这种新的(浅绿色)颜色。

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

我非常感谢有关如何实现它的实际帮助。谢谢堆!

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

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, 255, 0, cmyk1); // yellow

float cmyk2[4];
toCMYK(0, 255, 255, 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++ - 像油漆一样添加颜色(颜色)(蓝色 + 黄色 = 绿色等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10139833/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com