首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中使用逐位>>的颜色提取

在javascript中使用逐位>>的颜色提取
EN

Stack Overflow用户
提问于 2014-10-01 09:40:59
回答 4查看 143关注 0票数 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

EN

回答 4

Stack Overflow用户

发布于 2014-10-01 10:58:24

您应该使用的是零填充右移位>>>,而不是>> (签名的右移位):

代码语言: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 255

使用>>,只有当最重要的位是0时,您才能得到正确的结果。

票数 4
EN

Stack Overflow用户

发布于 2014-10-01 09:50:38

您可能在Javascript的数字处理中遇到了不准确的地方。

先换档,然后换档:

代码语言: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
EN

Stack Overflow用户

发布于 2014-10-01 10:07:52

解释如下:

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

右边的位移位器被丢弃,信号位被添加到左边。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26138414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档