Saltar al contenido

Convertir un valor de color RGB en decimal

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *