2012-03-19 61 views
3

我找到了一個RGB到十六進制轉換器,我正在嘗試製作一個RGBA到十六進制轉換器。原始的rgb2hex函數可以工作,但新的rgba2hex函數不能。我究竟做錯了什麼? rgba函數返回gba,no r。javascript轉移問題(rgb和rgba爲十六進制)

// convert RGB color data to hex 
function rgb2hex(r, g, b) { 
    if (r > 255 || g > 255 || b > 255) 
     throw "Invalid color component"; 
    return ((r << 16) | (g << 8) | b).toString(16); 
} 

// convert RGBA color data to hex 
function rgba2hex(r, g, b, a) { 
    if (r > 255 || g > 255 || b > 255 || a > 255) 
     throw "Invalid color component"; 
    return ((r << 32) | (g << 16) | (b << 8) | a).toString(16); 
} 

例子:

alert(rgb2hex(255, 155, 055)); 
alert(rgba2hex(255, 155, 055, 255)); 

電流輸出:ff9b2d9b2dff

預期輸出:ff9b2dff9b2dff

回答

6

你的問題是JavaScript中的按位數學計算在31位上,所以你不能這樣做。您需要使用普通數學OPS,不按位老年退休金計劃:

// convert RGBA color data to hex 
function rgba2hex(r, g, b, a) { 
    if (r > 255 || g > 255 || b > 255 || a > 255) 
     throw "Invalid color component"; 
    return (256 + r).toString(16).substr(1) +((1 << 24) + (g << 16) | (b << 8) | a).toString(16).substr(1); 
} 

而且固定的問題與原來的算法,其中,第一成分是< 10,輸出沒有足夠的數字。

無論如何,這將無法正常工作...... #ff9b2dff是不是一個有效的顏色,但你可能不在意?

+0

謝謝,alpha值是自定義的,只有0-255整數。 – Justin808 2012-03-19 07:41:52

-1

我覺得你在這裏失蹤的想法,阿爾法值將決定RGB posphors產生的顏色的不透明度,這意味着它總是在0之間一個標準的約定,除非你想讓這個值「定製」到你的項目中。

函數的返回值似乎遇到了Javascript的位移機制的限制。請考慮返回r.toString(16) + g.toString(16) + b.toString(16) + a.toString(16)

相關問題