Come posso verificare se due strutture System.Drawing.Color rappresentano lo stesso colore con profondità colore a 16 bit (o in genere in base al valore di Screen.PrimaryScreen.BitsPerPixel)?Come verificare se due strutture System.Drawing.Color rappresentano lo stesso colore con profondità colore a 16 bit?
Diciamo che ho impostato Form.TransparencyKey su Valore1 (di tipo Colore), voglio controllare che quando l'utente seleziona un nuovo colore di sfondo per il modulo (Valore2), non imposto l'intero modulo trasparente.
Nelle schermate profondità colore 32bit semplicemente confronta i due valori:
se (Valore1 Valore2 ==)
Tuttavia, questo non funziona su schermi profondità colore 16bit, come più valori di colore per il Valore2 rappresenterebbe lo stesso colore a 16 bit di Value1, come ho scoperto nel modo più difficile.
Giusto per capire, se puoi darmi maggiori dettagli sul perché moltiplichi il valore rosso con 32, il valore verde con 64 e il valore blu con 32? Grazie – AnAurelian
Per lo stesso motivo della risposta di nobugz: il colore RGB (vero) a 16 bit in Windows è costituito da 5, 6 e 5 bit (2 alla potenza di 5 è 32, 2 alla potenza di 6 è 64). Pertanto, se dividi i byte rosso e blu originali di 256 e li moltiplichi per 32 ottieni la rappresentazione arrotondata a 5 bit. Lo stesso vale per i 6 bit del Green. – Webleeuw