2017-02-21 292 views
0

我想问一下在RGB和一个连续的颜色值之间是可行的吗(比如在float [0..1]或Integer [0..255]中)代表一个颜色范围。在RGB和一个整数/浮点值之间进行转换

例如:I具有连续色彩范围像彩虹:

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

- >与表示0〜1或0〜255(或无论范围)

现在我想改变价值例如(0.5 =绿色)变成相等的RGB值([0,1,0]?)。传递函数(后退和前进)可能吗?也许在Python中?

回答

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到一维的规模(如上面的),你就只需要i作为单个变量,你可以存储一个查找,如果你想购买或创建一个函数按照上面的每行一样,从单个值i创建颜色。

从技术上讲,从这个一维标度回到三维标度在技术上是不可能的。你失去了你需要的额外信息。但是,如果您知道您的映射函数来创建比例,则可以简单地通过各自的输入获取每个RGB值。

希望这会有所帮助。

+0

谢谢,你是完全正确的。遍历所有可能的颜色很难遍历一个_i_。当我查看Photoshop时,我发现了一种颜色管理器,它可以在“圆圈”(不包括亮度)下迭代所有可能的颜色:[link](https://picload.org/image/rlgwlcci/screenshot2017-02-2116.15 .26.png)它以红色(0,0,256)开始,以相同的红色值结束,同时增加/减少_i_以及6转...因此它在3D RGB空间中创建6行,同时收集最重要的颜色。我试图建立一个传递函数。 – Rainflow

+0

不错,听起来像你的Photoshop调查和我的答案之间,你可能有一个工作系统!感谢您接受我的回答,如果它帮助您达到您的解决方案 – Wolfie

0

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

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

这里有一个在线计算器,将其转换任何单独的颜色:​​

代码在任何给定的语言十六进制转换器将全部在谷歌。 :)

您可以使用任何您喜欢的数字空间(例如0-1或任何其他数字),并根据需要随意来回切换,只要您选择的数字空间可以保存所有这些16.7百万种独特的颜色即可。

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