graphics - RGB 混合颜色的计算

标签 graphics colors rgb mixing

我希望能够获取两个 RGB-256 向量并计算它们的混合结果。我还希望能够为每个向量赋予不同的权重。我已经使用 Word 颜色板进行了实验,并且发现虽然某些颜色确实根据加权平均值进行混合:

0.5*红色(255,0,0) + 0.5*黄色(255,255,0) = 橙色(255,127,0)

其他人没有:

0.5*黄色(255,255,0) + 0.5*蓝色(0,0,255) = 灰色(127,127,127) 而不是绿色(0,255,0)

是否有一种算法可以准确计算所有颜色,或者我是否被迫使用查找表来进行计算?

最佳答案

最好的解释是 RGB color model对于我们人类来说有点不直观
对于只知道如何通过混合不同数量的颜色来显示颜色的视频显示设备(例如显示器或电视)来说,这是完全合乎逻辑的3 种预定义颜色:红色、绿色和蓝色。但这不是你我在小学学习混合颜色的方式。

在 RGB 中,白色表示为 (255, 255, 255),相当于“全亮”。显示每个红色、绿色和蓝色分量的完整值,这会产生如此高的光强度,使我们将颜色感知为白色。相反,黑色 (0, 0, 0) 是显示设备的“默认”状态——当没有颜色光显示时(“0”),结果是黑色,或者没有颜色。

当您完全混合黄色 (255, 255, 0) 和蓝色 (0, 0, 255) 时,您会得到由 (255, 255, 255) 或白色表示的颜色。当您将白色乘以 0.5 时,您会得到灰色,因为 255 * 0.5 = 127。

这可能比混合红色和黄色时得到的预期结果更反常。红色 + 黄色是 (510, 255, 0),因此当您将其乘以 0.5 时,会得到橙色 (255, 127, 0)。

事实证明,你和我在小学学到的东西实际上更准确地称为subtractive color model ,与 additive color model由 RGB 使用。查看底部的两个图表,您会看到左侧是 RGB 颜色模型(加法),而右侧是 CMYK 颜色模型(减法)。您应该能够立即看到问题。使用减色模型将产生您想要的结果。

          RGB Color Model CMYK Color Model

编辑:当然,说起来容易做起来难。也就是说,即使您采用 CMYK 颜色模型而不是 RGB(这已经很困难了,因为从 RGB 到 CMYK 的转换很大程度上依赖于设备并且远非简单),这可能仍然无法满足将纯蓝色 (0, 0, 255) 与纯黄色 (255, 255, 0) 混合并得到绿色的冲动。 CMYK 使用青色、品红色和黄色作为 3 基色,而不是红色、黄色和蓝色。如果您想实现 RYB color model,那么您还有很多工作要做。以您选择的语言。

我不知道有任何这样的算法可以真实地组合 RGB 颜色。我试图在回答中解释为什么这是不可能的,或者至少是极其困难的。您可以将这个问题再留几天,看看其他人是否有任何想法,但如果您需要坚持使用 RGB 模型,我会继续并从查找表开始。 ;-)

关于graphics - RGB 混合颜色的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255973/

相关文章:

graphics - dia 图形程序绘制花括号

c++ - 在 OpenGL 中绘制形状的标准(常见)方法是什么?

c# - 从十进制数据在 C# 中创建图像或图形?

math - 不使用位操作的随机数生成

r - 将调色板与 colorRampPalette 合并并使用传单进行绘图

c# - 读取同风格的dox,docx文件

java - 在 Java 中将像素数组转换为图像

c# - 为什么转换为一个字节然后立即返回一个 int?

在裸 C 中将 RGB 转换为灰度

c++ - 使用 SSE2 优化 RGB565 到 RGB888 的转换