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 view
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 ) ;
}
Existen dos fórmulas generales para calcular el nivel de brillo, yo utilizo la más común que es la que, parece ser, más se acerca a la visión del ser humano. Si el valor es mayor que 100, entonces el color es brillante, cuanto mayor sea ese valor, más brilllante.
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