为什么我的阿尔法错了?
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
答案 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)
答案 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);
});