2017-02-21 219 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百萬種獨特的顏色即可。

如果你壓縮數字空間,你會失去一些顏色(如第一張海報解釋)。