2013-07-30 10 views
9

posso già convertire interi a 32 bit nei loro valori RGBA come questo:Conversione di valori RGBA in un intero in Javascript

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

Ma io non so davvero come invertire esso.

risposta

11

Per invertire, è sufficiente combinare i byte in un numero intero. Basta usare lo spostamento a sinistra e aggiungerli, e funzionerà.

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

In alternativa, per renderlo più sicuro, si potrebbe prima e ciascuno di loro con 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); 

(Si può usare OR bit a bit | invece di + qui, il risultato sarà lo stesso).

+0

Questo funziona, anzi. Ho pensato che non fosse perché il valore di input non era lo stesso del valore di uscita. Ancora non lo è. Non so quali bit extra sono memorizzati lì, ma immagino che non contengano. – skerit

+0

Ricorda che questo non funziona con r/g/b/a essendo interi. Uno deve cast espressamente in byte prima di aggiungerli insieme. – lunatix

Problemi correlati