Colores brillante, o no

Post Reply
antolin
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Colores brillante, o no

Post 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
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Colores brillante, o no

Post by antolin »

He aquí un ejemplo:

Image
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Colores brillante, o no

Post by antolin »

Creo colores aleatorios para el fondo dl dialogo, y después utilizo variaciones de los mismos para el resto
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
User avatar
Antonio Linares
Site Admin
Posts: 42270
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Colores brillante, o no

Post by Antonio Linares »

Muy bonito y muy profesional! :-)

Gracias por compartirlo!
regards, saludos

Antonio Linares
www.fivetechsoft.com
antolin
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Colores brillante, o no

Post 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
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
paquitohm
Posts: 284
Joined: Fri Jan 14, 2022 8:37 am

Re: Colores brillante, o no

Post 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
Post Reply