RGB 和一个整数/浮点值之间的转换

Rai*_*low 2 rgb colors range

我想问是否可以在 RGB 和代表颜色范围的一个连续颜色值(例如 float [0..1] 或 Integer [0..255])之间进行转换。

例如:我有一个像彩虹一样连续的颜色范围:

红-橙-黄-绿-蓝-靛-紫

-> 用0~1或0~255(或任何范围)表示

现在我想将值(例如(0.5 = 绿色))转换为相等的 RGB 值([0,1,0]?)。这可以通过传递函数(向后和向前)实现吗?也许用Python?

Wol*_*fie 5

RGB 需要 3 个数字的全部原因是因为它本质上是一个 3D 空间。您可能会尝试将 3 条连续数轴压缩为 1 条!您必须选择一个比例,像下面一样进行操作,看看您喜欢哪种颜色混合......(用 VBA 编写的代码,但易于移植)

For i = 1 To 255   
    ' Scale with no red, increase and decrease blue and green respectively
    Range("a" & i).Interior.Color = RGB(0, i, 255 - i)
    ' Use a MOD function to keep the values between 0 and 255
    ' note this can cause some abrupt changes in your scale
    Range("b" & i).Interior.Color = RGB(128 + i Mod 255, i, 255 - i)
    ' You can increase and decrease different RGB values for desired result
    Range("c" & i).Interior.Color = RGB((255 - i) Mod 255, (0 + i) Mod 255, i)    
Next i
Run Code Online (Sandbox Code Playgroud)

输出(为了更好地查看,将列变成行):

色带

因此,要从 RGB 到 1D 比例(如上面的那些)i,您只需将其作为单个变量,如果需要,您可以存储一个查找,或者创建一个函数,该函数的作用与上面每一行的操作相同,从单个值创建颜色的i

现在从 1D 比例回到 3D 比例在技术上是不可能的。您已经丢失了所需的额外信息。但是,如果您知道创建比例的映射函数,则可以简单地通过其各自的输入获取每个 RGB 值。

希望这可以帮助。