typescript - färgutdragning med bitvis >> i javascript


varför är min alfa fel?

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);

utdata :

17,34,51,-0.00392156862745098

Svar #1

Det du bör använda är en nollutfyllnad högerförskjutning >>> istället för >> (signerad fortplantande högerförskjutning) :

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);

Du får 17 34 51 255

Med >> fick du bara rätt resultat när den mest signifikanta biten var 0.

Svar #2

Du stöter förmodligen på felaktigheter i Javascripts hantering av tal.

Skifta först, sedan mask:

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]