¿Cómo puedo comprobar si dos estructuras System.Drawing.Color representan el mismo color en una profundidad de color de 16 bits (o generalmente se basa en el valor de Screen.PrimaryScreen.BitsPerPixel)?¿Cómo comprobar si dos estructuras System.Drawing.Color representan el mismo color en una profundidad de color de 16 bits?
Digamos que establezco Form.TransparencyKey en Value1 (del tipo Color), quiero comprobar que cuando el usuario selecciona un nuevo color de fondo para el formulario (Value2), no establezco el formulario completo como transparente.
En las pantallas de color de 32 bits de profundidad simplemente comparar los dos valores:
si (Valor1 == Valor2)
Sin embargo, esto no funciona en las pantallas de profundidad de color de 16 bits, a medida que más valores de color para el Valor2 representaría el mismo color real de 16 bits que Value1, como descubrí por el camino difícil.
Solo para entender, si puede darme más detalles sobre por qué multiplica el valor rojo con 32, el verde con 64 y el azul con 32? Gracias – AnAurelian
Por la misma razón que la respuesta nobugz: el color RGB (verdadero) de 16 bits en Windows se acumula de 5, 6 y 5 bits (2 a la potencia de 5 es 32, 2 a la potencia de 6 es 64). Por lo tanto, si divide los bytes rojos y azules originales por 256 y los multiplica por 32 obtendrá la representación redondeada de 5 bits. Lo mismo se aplica a los 6 bits del Green. – Webleeuw