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]
