En mis progrmas utilizo mucho color. Me gusta que mis dialogos se generen utilizando colores aleatorios para romper la monotonía y no aburrir al usuario de turno. Para ello necesitaba calcular el grado de brillo de cada color, y por eso implementé unas pequeñas funciones en C++ que a lo mejor pueden interesar a alguien:
Code: Select all | Expand
float XBright( COLORREF nColor ) ; // DECLARACION DE LA FUNCCION XBright
HB_FUNC( BRIGHTNESS ) // Brightness( nColor ) // RETORNA NIVEL DE BRILLO CALCULADO
{
hb_retnl( XBright( ( COLORREF ) hb_parnl( 1 ) ) ) ;
}
HB_FUNC( ISBRIGHT ) // IsBright( nColor ) // AVERIGUA SI UN COLOR ES BRILLANTE
{
hb_retl( XBright( ( COLORREF ) hb_parnl( 1 ) ) > 100 ) ;
}
float XBright( COLORREF nColor ) // CALCULO DEL NIVEL DE BRILLO
{
return ( GetRValue(nColor)*0.299 )+( GetGValue(nColor)*0.587 )+( GetBValue(nColor)*0.114 ) ;
}
Por ejemplo, en un browse, para el fondo utilizaría un color muy brillante cercano al 200 o más y para la letra uno menor que 64. O, si programo un cartel con un color aleatorio para el fondo, determinar si es brillante o no para adaptar el color de la letra.
Espero que os sea de utilidad.
Saludos