2014-10-01 17 views
2

爲什麼我的阿爾法錯了?顏色提取使用按位>>在javascript中

var d:number = 0xff112233; 

var r:number = (d & 0x00ff0000) >> 16; 
var g:number = (d & 0x0000ff00) >> 8; 
var b:number = d & 0x000000ff; 
var a:number = (d & 0xff000000) >> 24 ; 
console.log(r,g,b,a); 

輸出:

17,34,51,-0.00392156862745098

回答

2

你可能運行到Javascript中的號碼不準確的處理。

Shift鍵,然後再掩蓋:

function extractRGBA(d) { 
    var b = d & 0xFF; 
    var g = (d >> 8) & 0xFF; 
    var r = (d >> 16) & 0xFF; 
    var a = (d >> 24) & 0xFF; 
    return [r, g, b, a]; 
} 

console.log(extractRGBA(0xff112233)); 

[17, 34, 51, 255] 
+0

我正忙着尋找解決方案,我自己。這似乎是OP的問題的答案。 – Cerbrus 2014-10-01 09:51:37

0

可能會嘗試這樣的: 沒有必要專門使用數量。

$(document).ready(function(){ 
     var d= 0xff112233;   
var r= (d & 0x00ff0000) >> 16 & 255; 
var g= (d & 0x0000ff00) >> 8 & 255; 
var b = d & 0x000000ff & 255; 
var a= (d & 0xff000000) >> 24 & 255; 
console.log(r,g,b,a); 
}); 
4

你應該用的是一個填零rightshift >>>而不是>>(簽署propogating右移):

var d:number = 0xff112233; 

var r:number = (d & 0x00ff0000) >>> 16; 
var g:number = (d & 0x0000ff00) >>> 8; 
var b:number = d & 0x000000ff; 
var a:number = (d & 0xff000000) >>> 24 ; 
console.log(r,g,b,a); 

你得到17 34 51 255

隨着>>你只得到正確的結果時,最有效位是0

相關問題