2012-04-22 83 views
-3

我想在0和1之間的值轉換爲RGB值,基於以下幾點:值到RGB值

enter image description here

你如何在Python這樣做嗎?

+5

[你有什麼嘗試?](http://whathaveyoutried.com)是不是很清楚,該圖提供了從[[0,1]'到RGB的映射嗎?你只需要爲每個函數('R(x)','G(x)'和'B(x)')構造一個分段函數。 – 2012-04-22 15:47:00

回答

2

嘗試colorsys模塊。將HSB與Hue轉換爲變量,飽和度和亮度均爲1.0,應該給出類似的結果。

+0

HSV的組件映射與上圖中的組件映射稍有不同。從它的外觀上移動大約150度; http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB – 2012-04-22 16:00:45

+0

@RolandSmith好點 - 它實際上並沒有正確匹配 - 它也不是週期性的。我想它必須是一個自己的功能。 – neil 2012-04-22 16:11:02

0

注意,三種顏色的功能已保存形狀,從外觀上看它甚至完全相同。因此,您可以通過定義一個函數,然後使用偏移量輸入來調用它來生成R,G和B值。暗示;看看綠色組件的圖表。這基本上是域0-0.5中的上升線和域0.5-1中的下降線。外推找出綠線與顏色= 0.0相交的點(這是上升線的底部,將是< 0),顏色= 1.0,相互之間(這是rigins線的頂部,將是< 1 ),並用它來編寫綠色組件的函數。然後限制返回值0和1之間

def component(x): 
    '''Function for the green component.''' 
    top = 1.5 
    bottom = -0.5 
    if x < 0.5: 
    rv = x/0.5*(top-bottom)+bottom 
    else: 
    rv = (x-0.5)/0.5*(bottom-top)+top 
    if rv > 1.0: 
    return 1.0 
    if rv < 0.0: 
    return 0.0 
    return rv 

(對於top值和bottom是估計值;測量所述圖形!)

現在對於其它顏色;請注意,紅色圖形如何以比綠色更高的顏色值離開0線。因此,要使用綠色分量函數獲取紅色,請在將紅色和綠色圖形送入函數以計算綠色值之前,從輸入值中減去紅色和綠色圖形之間的水平距離。對於藍色值,你必須添加someting而不是減去它。