Visual Basic.NET - como obtener un color de fuente que contraste sobre otro de fondo

 
Vista:

como obtener un color de fuente que contraste sobre otro de fondo

Publicado por David (2 intervenciones) el 30/03/2016 09:53:44
Hola,
Tengo un programa en vb.net vs2010 con el cual dibujo muchos rectángulos con la GDI+ dentro de un picture cada uno de esos rectángulos tiene un color de fondo que varía según el valor que va escrito dentro de cada rectángulo. Lo que quiero es una función que a sabiendas de esos colores de fondo me diga si el color de la fuente debe ser negra o blanca para que sea legible, es decir, cual de esos dos colores es el que mejor contraste tiene para ese color de fondo.

La función que estoy utilizando ahora es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Protected Friend Function obtenerColorLetra(ByVal meColor As Color) As Brush
	Dim Total As Integer
 
	Try
		Total = Int(meColor.R) + Int(meColor.G) + Int(meColor.B)
		If Total < 400 Then
			Return Brushes.White
		Else
			Return Brushes.Black
		End If
	Catch ex As Exception
		Throw New Exception("Colores: Obtener Color Letra - " & ex.Message, ex)
	End Try
End Function

Le paso el color de fondo y me devuelve el color del Brush, pero no me convence para nada, muchas veces en colores claros como "Cyan" o "GreenYellow" me devuelve blanco, me parece que no es un buen método para saberlo. Por eso me gustaría preguntar si conocéis un método mejor o se os ocurre alguno que pueda funcionar.

Muchísimas gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

como obtener un color de fuente que contraste sobre otro de fondo

Publicado por Miguel (476 intervenciones) el 30/03/2016 21:02:13
Hola, intenta con esto:

1
2
3
4
5
6
7
8
9
10
Protected Friend Function ObtenerColorLetra(ByVal colorFondo As Color) As Brush
 
    Dim media As Integer = (Int(colorFondo.R) + Int(colorFondo.G) + Int(colorFondo.B)) / 3
    If media < (255 / 2) Then
        Return Brushes.White
    Else
        Return Brushes.Black
    End If
 
End Function

Slds.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como obtener un color de fuente que contraste sobre otro de fondo

Publicado por David (2 intervenciones) el 01/04/2016 09:02:53
Funciona mucho mejor.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar