c - RGB 到 RGB 加琥珀色

标签 c colors plc dmx512

<分区>

我想从更高的系统控制 DMX 灯。我只收到 RGB 值 0-255。 DMX 灯有红色、绿色、蓝色和琥珀色灯 (0-255)。如何将 RGB 转换为 RGB + 琥珀色?

我试过手动调整灯光,但转换表对我来说不是一个选项,因为我的内存有限。 谢谢。 R

最佳答案

在光中,有不同的色彩空间。每个颜色空间都是一个维度空间,因此沿着“维度”组合颜色将产生混合颜色。

RGB,意味着您可以混合各种值的红色、绿色和蓝色。琥珀色已经是一种混合物,因此要向 RGB“添加琥珀色”,您必须决定如何调整红色、绿色和蓝色的值,使它们看起来更像琥珀色。

琥珀色是#FFBF00 或 (RGB: 255, 191, 0),所以第一步是计算一个 RGB 值有多少“琥珀色”。例如,(RGB: 128, 80, 0) 是 50% 的琥珀色和 0% 的其他颜色。

一旦您可以计算出琥珀色百分比,您就可以“取出琥珀色”,将其余非琥珀色留在 RGB 中。然后你可以有一个 RGBAmber 颜色空间。

请记住,您不能过度驱动 RGB,因此如果您添加 (RGBAmber: 50%, 20%, 0%, 100%),它将被转换为 RGB(100%, ...)不会让红色像其他颜色一样放大,使琥珀色的东西看起来有点不对劲。

实际上,这将正确地近似于第四个琥珀维度的构造;但是,它不会是正确的。事实上,您无法从其他三个维度完全构建第四维度,因为红绿蓝在物理上的混合与琥珀色 channel 产生的不同。例如,在所有 channel 中以 100% 驱动 RGBAmber 是完全有效的,但 RGB 永远无法做到这一点,因为以 100% 驱动琥珀色会有效地将所有红色 channel 归零。

关于c - RGB 到 RGB 加琥珀色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462331/

相关文章:

floating-point - PLC 结构化文本,将十进制转换为实数( float )。没有得到我期望的值(value)。 (IEEE-754)

c - 项目帮助 : Function and Struct issues in C?

c - 如何知道 vfork 函数中的父进程或子进程

java - 使用监视器输入 : How should i call synchronised method?

java - 在 RGB 的 'red' 值上添加一定量以创建日落效果,请帮忙。 (java)

javascript - OPC 服务器到 MySQL 数据库

c++ - 在基于 Linux 的 WAGO PFC200 PLC 上与 CoDeSys 程序通信

c - C 中 *ptr += 1 和 *ptr++ 之间的区别

css - 使用纯 CSS(无 javascript)生成随机颜色?

html - 为2个不同的对象生成相同的2种随机颜色