Solución:
Los enteros RGB generalmente se tratan como tres bytes distintos donde el byte más a la izquierda (orden más alto) es rojo, el byte medio es verde y el byte más a la derecha (orden más bajo) es azul. Puede recuperar los valores de estos bytes individuales de esta manera:
var c = 0xff03c0; // 16712640
var components = {
r: (c & 0xff0000) >> 16,
g: (c & 0x00ff00) >> 8,
b: (c & 0x0000ff)
};
Puede volver a crear un color a partir de sus componentes volviendo a cambiar los bytes a:
c = (components.r << 16) + (components.g << 8) + (components.b);
En su caso, simplemente sustituya components.r
(etc.) con sus variables reales.
Una respuesta mucho mejor (en términos de claridad) es esta:
'Convert RGB to LONG:
LONG = B * 65536 + G * 256 + R
'Convert LONG to RGB:
B = LONG 65536
G = (LONG - B * 65536) 256
R = LONG - B * 65536 - G * 256
LONG es el entero largo (decimal) que desea hacer. Fácil, ¿eh? Claro, cambio de bits
var dec = (b & 0xff) << 16 + (g & 0xff) << 8 + (r & 0xff);
(Creo que ese es el orden correcto para los valores r, g, b)
Actualizar
Acabo de verificar las aplicaciones del navegador y obtuve el orden incorrecto, por lo que la fórmula correcta para los navegadores (lea HTML + CSS + javascript) es:
var dec = r << 16 + g << 16 + b;
Suponiendo valores de r, g, b <= 255
Otras API pueden esperar un orden diferente para los valores r, g, b. Me parece recordar al menos uno que tiene el orden invertido (según mi respuesta original), pero pienso cuál es en este momento.