2011-12-12 104 views
8

如何將RGB顏色值轉換爲普通小數?將RGB顏色值轉換爲十進制

所以我有:RGB(255,255,255)是白色
相應的十進制數爲:16777215

我試圖想它可能只是:

var dec = r*g*b; // but this doesn't work 

雖然不工作。

任何人都知道從RGB(或rgba)轉換爲十進制的算法/公式?

+2

16,777,215是RGB(255,255,255)的十六進制版本0x00FFFFFF的十進制等效值。 –

+0

你打算如何處理這些值?你給他們什麼軟件/功能/等? –

+0

我有一個Flash應用程序的顏色值,它是十進制的,我需要在html/css中顯示它們,並且也可以將其轉換回去。 –

回答

10

通常將RGB整數視爲三個不同的字節,其中最左側(最高位)字節爲紅色,中間字節爲綠色,最右側(最低位)字節爲藍色。你可以檢索這些單個字節的值是這樣的:

var c = 0xff03c0; // 16712640 
var components = { 
    r: (c & 0xff0000) >> 16, 
    g: (c & 0x00ff00) >> 8, 
    b: (c & 0x0000ff) 
}; 

您可以通過轉移字節後面再從其組件創建一個顏色:

c = (components.r << 16) + (components.g << 8) + (components.b); 

在你的情況下,可以替換components.r (等)與你的實際變量。

3
var dec = (b & 0xff) << 16 + (g & 0xff) << 8 + (r & 0xff); 

(我認爲這是對R,G,B值按正確的順序)

更新

我只是檢查瀏覽器的應用程序和我得到的順序不對,所以正確的公式瀏覽器(HTML讀+ CSS + JavaScript的)爲:

var dec = r << 16 + g << 16 + b; 

假設R,G,b值< = 255

其他API的r,g,b值可能會有不同的順序。我似乎記得至少有一個順序顛倒過來(按我的原始答案),但我認爲它現在是哪一個。

+0

你可能是正確的關於訂單,在這種情況下,我的答案是錯誤的:( –

+0

正確的順序在什麼?對誰?訂單取決於誰的*閱讀*的價值。 –

+0

@Nicol - 不,正確的順序取決於API。我不確定Win32 API,但對於基於瀏覽器的應用程序(我假設這裏正在討論),我很肯定Blue是三個字節中的高位字節,紅色是低位字節 –

0

需要到R 16的左移位,所述的G向左8和或二者的B.看值作爲比特和所有將變得清楚:

- [R 255 = 11111111B ģ 255 = 11111111B 乙255 = 11111111B

移位R 16:111111110000000000000000 移位克8-:000000001111111100000000

或成B:111111111111111111111111

便利着想rt到十進制:16777215

1
if (color.substr(0, 1) === '#') { 
    return color; 
} 
var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color); 
var red = parseInt(digits[2]); 
var green = parseInt(digits[3]); 
var blue = parseInt(digits[4]); 
var rgb = blue | (green << 8) | (red << 16); 
return rgb.toString(10); 
+1

rgb.toString(10)是需要的 –

5

更好的答案(在清晰度方面)是這樣的:

'Convert RGB to LONG: 
LONG = B * 65536 + G * 256 + R 

'Convert LONG to RGB: 
B = LONG \ 65536 
G = (LONG - B * 65536) \ 256 
R = LONG - B * 65536 - G * 256 

長,你想使你的長整型(十進制)。 容易吧? 當然,bitshift

+1

我認爲位移更清晰。 –

+0

@ DanielA.White可能不這麼認爲,但我看不出這個問題的答案是如何清晰的。即使我能理解這一點。 –