Page 1 of 1

Colores brillante, o no

Posted: Sat Jun 08, 2024 9:13 am
by antolin
Buenas a todos. Hace tiempo que vuelvo por aquí, pero de vez en cuando me gusta aportar mi granito de arena.

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 ) ;
   }
 
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

Re: Colores brillante, o no

Posted: Sat Jun 08, 2024 9:14 am
by antolin
He aquí un ejemplo:

Image

Re: Colores brillante, o no

Posted: Sat Jun 08, 2024 9:15 am
by antolin
Creo colores aleatorios para el fondo dl dialogo, y después utilizo variaciones de los mismos para el resto

Re: Colores brillante, o no

Posted: Sat Jun 08, 2024 12:06 pm
by Antonio Linares
Muy bonito y muy profesional! :-)

Gracias por compartirlo!

Re: Colores brillante, o no

Posted: Mon Jun 10, 2024 10:20 am
by antolin
Gracias.

He de puntualizar que lo he implementado en C++ para mayor velocidad de proceso, pero que no es necesario, también se puede hacer sólo en FW

Re: Colores brillante, o no

Posted: Fri Jun 14, 2024 4:36 pm
by paquitohm
Hola Antolín,

No estoy seguro si se corresponde con lo que yo hice en su dia.
En mi caso dejo al usuario escoger los colores "base" del programa y en funcion de ellos muestro el mismo grado de brillo pero para el color escogido. Recuerdo que lo hice de una manera que calificaria "poco etica" por ineficiente :D
Revisare tu funcion de calculo de brillo.

Gracias por tu aporte