我想问是否可以在 RGB 和代表颜色范围的一个连续颜色值(例如 float [0..1] 或 Integer [0..255])之间进行转换。
例如:我有一个像彩虹一样连续的颜色范围:
红-橙-黄-绿-蓝-靛-紫
-> 用0~1或0~255(或任何范围)表示
现在我想将值(例如(0.5 = 绿色))转换为相等的 RGB 值([0,1,0]?)。这可以通过传递函数(向后和向前)实现吗?也许用Python?
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 值。
希望这可以帮助。