Con il termine "colore" di solito significa 24 -colore RGB: 1 byte (8 bit) per rosso, verde, blu. Cioè, ogni canale ha valore da 0-255 o da 0x00 a 0xff in visualizzazione esadecimale.
Il colore bianco è tutti i canali: #FFFFFF, il nero è tutti i canali disattivati: # 000000. Ovviamente, il colore più chiaro significa valori più alti nei canali, il colore più scuro significa valori più bassi nei canali.
Come esattamente si sceglie l'algoritmo dipende da voi, semplice sarebbe:
//pseudo-code
if (red + green + blue <= (0xff * 3)/2) //half-down, half-up
fontcolor = white;
else
fontcolor = black;
Edit: richiedente chiede ad esempio più completo, così lui/lei può avere inizio migliore, così qui è:
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 in uscita:
red = 11, green = 22, blue = 33
using white color #ffffff
color was #112233
E mostra la tecnica di scomposizione del colore in formato #aabbcc in canali rgb, unendoli in seguito (se necessario), ecc.
Credo che si dovrebbe cercare Javascript per raggiungere questo obiettivo. –
potresti tagliarlo velocemente usando l'inverso del tuo colore - così puoi essere sicuro che il testo è sempre visibile * inverted_color = valore esadecimale di FFFFFF - your_color * – Lucius