Por "color" que por lo general significa 24 -bit color RGB: 1 byte (8 bits) para rojo, verde, azul. Es decir, cada canal tiene un valor de 0-255 o de 0x00 a 0xff en la visualización hexadecimal.
El color blanco es todos los canales llenos: #FFFFFF, negro, todos los canales están desactivados: # 000000. Obviamente, un color más claro significa valores más altos en los canales, el color más oscuro significa valores más bajos en los canales.
¿Cómo funciona exactamente de elegir su algoritmo depende de usted, una simple sería:
//pseudo-code
if (red + green + blue <= (0xff * 3)/2) //half-down, half-up
fontcolor = white;
else
fontcolor = black;
Editar: autor de la pregunta pide ejemplo más completo, por lo que él/ella puede tener mejor comienzo, así que aquí es:
public static void main(String[] args) throws IOException {
String value =
// new Scanner(System.in).nextLine(); //from input
"#112233"; //from constant
int red = Integer.parseInt(value.substring(1, 1 + 2), 16);
int green = Integer.parseInt(value.substring(3, 3 + 2), 16);
int blue = Integer.parseInt(value.substring(5, 5 + 2), 16);
System.out.println("red = " + Integer.toHexString(red)
+ ", green = " + Integer.toHexString(green)
+ ", blue = " + Integer.toHexString(blue));
if (red + green + blue <= 0xff * 3/2)
System.out.println("using white color #ffffff");
else
System.out.println("using black color #000000");
String colorBackToString = "#" + Integer.toHexString(red) +
Integer.toHexString(green) +
Integer.toHexString(blue);
System.out.println("color was " + colorBackToString);
}
produce salida:
red = 11, green = 22, blue = 33
using white color #ffffff
color was #112233
Y muestra la técnica de dividir el color en formato #aabbcc en canales rgb, unirlos más tarde (si es necesario), etc.
Creo que se debe tratar JavaScript para lograrlo. –
puede cortarlo rápidamente usando el inverso de su color - por lo tanto, puede estar seguro de que el texto siempre estará visible * inverted_color = valor hexadecimal de FFFFFF - your_color * – Lucius