问题 在Javascript中将rgba值转换为一个整数


我已经可以将32位整数转换为它们的rgba值,如下所示:

pixelData[i] = {
        red: pixelValue >> 24 & 0xFF,
        green: pixelValue >> 16 & 0xFF,
        blue: pixelValue >> 8 & 0xFF,
        alpha: pixelValue & 0xFF
    };

但我真的不知道如何扭转它。


3434
2017-07-30 11:35


起源



答案:


要反转它,您只需将字节组合成一个整数。 只需使用左移并添加它们即可。

var rgb = (red << 24) + (green << 16) + (blue << 8) + (alpha);

或者,为了使其更安全,您可以首先使用0xFF和每个它们:

var r = red & 0xFF;
var g = green & 0xFF;
var b = blue & 0xFF;
var a = alpha & 0xFF;

var rgb = (r << 24) + (g << 16) + (b << 8) + (a);

(您可以使用按位OR | 代替 + 在这里,结果将是相同的)。


13
2017-07-30 11:41



确实如此。我认为不是因为输入值与输出值不同。仍然不是。不知道那里存储了多少额外的位,但我想它们并不重要。 - skerit
请记住,这不适用于r / g / b / a为整数。必须先将它们明确地转换为字节,然后再将它们相加。 - lunatix


答案:


要反转它,您只需将字节组合成一个整数。 只需使用左移并添加它们即可。

var rgb = (red << 24) + (green << 16) + (blue << 8) + (alpha);

或者,为了使其更安全,您可以首先使用0xFF和每个它们:

var r = red & 0xFF;
var g = green & 0xFF;
var b = blue & 0xFF;
var a = alpha & 0xFF;

var rgb = (r << 24) + (g << 16) + (b << 8) + (a);

(您可以使用按位OR | 代替 + 在这里,结果将是相同的)。


13
2017-07-30 11:41



确实如此。我认为不是因为输入值与输出值不同。仍然不是。不知道那里存储了多少额外的位,但我想它们并不重要。 - skerit
请记住,这不适用于r / g / b / a为整数。必须先将它们明确地转换为字节,然后再将它们相加。 - lunatix