Red de conocimiento informático - Problemas con los teléfonos móviles - Macro RGB#define _RGB16BIT565(r,g,b) ((bamp;31) (gamp;63)lt;lt;5) ((ramp;31)lt;lt;lt;11)) ¿Por qué ¿Necesitas primero comparar bit a bit?

Macro RGB#define _RGB16BIT565(r,g,b) ((bamp;31) (gamp;63)lt;lt;5) ((ramp;31)lt;lt;lt;11)) ¿Por qué ¿Necesitas primero comparar bit a bit?

El esquema de codificación en el que los valores RGB varían de 0 a 255 que usted mencionó es un esquema de color verdadero de 32 bits, en el que los bits de color verdadero se dividen en 8 bits para cada componente RGB, que son 24 bits. Cada bit oscila entre 0 y 255; los 8 bits restantes de orden superior son los bits alfa que representan la transparencia, que son exactamente

32 bits.

En cuanto a RGB565, R ocupa 5 bits, de 0 a 31; G ocupa 6 bits, de 0 a 63; B ocupa 5 bits, de 0 a 31. Sume todos los valores en todos los bits

Eso es 0-65535;

Las operaciones de color admitidas por la computadora son operaciones de color sin signo y no hay números negativos para los colores, incluso si crees que ingresaste es un número negativo

. Incluso si cree que está ingresando un número negativo, la computadora siempre lo reconocerá como un número positivo. Esto es un poco difícil de entender; por ejemplo, si escribe un número negativo en d pero lo imprime en u, no obtendrá un número negativo, la computadora lee, imprime y usa el color en u, como si fuera así; era una computadora.

En cuanto a por qué se dice presionar primero y luego cambiar de marcha, es puramente por conveniencia de cálculo. Los pasos de cambiar de marcha primero y luego

tomar son mucho más problemáticos. que esto. Los valores que quieres tomar no son simplemente 31, 63 y 31

. Pero 63488(1111100000000000), 2016(0000011111100000) y 31, entonces tu fórmula queda así:

#define _RGB16BIT565(r, g, b) ( (bamp; 31) ((glt; lt. 5 )amp; 2016) ((rlt; lt; 11)amp; 63488))), en comparación, no es más problemático que el original

Espero que te sea de ayuda