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

时间:2017-02-21 10:57:26

标签: colors range rgb

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

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

红色 - 橙色 - 黄色 - 绿色 - 蓝色 - 靛蓝色 - 紫罗兰色

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

现在我想改变价值,例如(0.5 =绿色)到相等的RGB值([0,1,0]?)。这是可能的转移功能(后退和前进)吗?也许在Python?

3 个答案:

答案 0 :(得分:2)

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

输出(列成行以便在此处更好地查看):

Colour bands

因此,从RGB转换为1D比例(如上所述),您只需要i作为单个变量,如果需要,可以存储查找或创建一个函数,该函数与上面的每一行相同,从单个值i创建颜色。

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

希望这有帮助。

答案 1 :(得分:0)

最简单的方法是在加权每个组件时添加RGB。这样做会给你0-16,777,215的范围。例如:

RGB Tuple = Hex Value = Decimal
0,0,0 = 0x000000 = 0
255,255,255 = 0xFFFFFF = 16777215

这是一个可以转换任何颜色的在线计算器:https://www.shodor.org/stella2java/rgbint.html

任何特定语言的十六进制转换器代码都将遍布谷歌。 :)

你可以使用你喜欢的任何数字空间(例如0-1或其他),并且可以根据需要来回移动,只要你选择的数字空间可以容纳1670多万个独特的颜色。

如果你压缩数字空间,你就会失去一些颜色(正如第一张海报所解释的那样)。

答案 2 :(得分:0)

此功能将沿一个方向进行传输(将单个值传输到rgb)...

f(x,i)= max(0,min(1,3 * abs(1-2 *((x-i / 3)mod 2))-1))

...如果您将rgb值定义为

{f(x,0),f(x,1),f(x,2)}

它从红色(x = 0)开始并在黄色(x = 1/6),绿色(x = 2/6),青色(x = 3/6),蓝色(x = 4 / 6),洋红色(x = 5/6),再次以红色(x = 1)结束整个周期。