使用按位>>颜色提取物在javascript中

时间:2014-10-01 09:40:59

标签: javascript typescript bit-manipulation

为什么我的阿尔法错了?

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

4 个答案:

答案 0 :(得分:4)

你应该使用的是零填充右移>>>而不是>>(签名传播右移):

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时,您才能获得正确的结果。

答案 1 :(得分:2)

您可能在Javascript的号码处理方面遇到了不准确之处。

先转移,然后屏蔽:

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]

答案 2 :(得分:2)

解释如下:

http://msdn.microsoft.com/en-us/library/ie/5s9e947e(v=vs.94).aspx

丢弃右侧的位移位器,并将信号位添加到左侧。

答案 3 :(得分: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);
});