Sto introducendo la funzionalità "tagging" nella mia applicazione e uno dei modi in cui permetto ai tag di essere visualizzato è quello di impostare il testo sul colore che l'utente ha selezionato per ciascuno. La mia applicazione ha tre temi con sfondi bianchi, neri e un marrone simile a un blocco note (questi potrebbero cambiare/crescere in futuro). Voglio essere in grado di visualizzare il tag nel suo colore nativo se facilmente contrasta lo sfondo, e basta usare il colore del testo predefinito per ogni tema altrimenti.Android/Java: Determinare se il colore del testo si fonde con lo sfondo?
Ho scritto una funzione di supporto per aiutarmi a determinare se il testo verrà mascherato, ma non è corretto al 100% (voglio determinare se i colori saranno mascherati in base a tutti e tre i componenti hsv e a destra ora il confronto di saturazione non è valido). Il codice è sotto
public static boolean colorWillBeMasked(int color, Application app){
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
//note 0, black 1, white 2
int theme = app.api.getThemeView();
System.out.println("h=" +hsv[0]+ ", s=" +hsv[1]+ ", v=" +hsv[2]+", theme="+theme);
if(android.R.color.transparent == color) return true;
// color is dark
if(hsv[2] <= .2){
if(theme == 1) return true;
}
// color is light
else if(hsv[2] >= .8) {
if(theme == 2) return true;
}
return false;
}
Nel richiamo con blu, rosso, trasparente, nero, giallo e verde l'uscita è la seguente (rispettivamente):
- h = 0,0, s = 1,0, v = 1,0, theme = 1
- h = 229,41,177 mila, s = 1,0, v = 1,0, theme = 1
- h = 267,6923, s = 1,0, v = ,050,980393 millions, theme = 1
- h = 0,0, s = 0,0, v = 0.0, theme = 1
- h = 59,529 41, s = 1.0, v = 1,0, theme = 1
- h = 111,29,411 mila, s = 1.0, v = 1,0, theme = 1
La mia domanda è: in base a tonalità, saturazione e valore, come puoi determinare se il testo colorato in un determinato modo verrà visualizzato su uno sfondo bianco o su uno sfondo nero o se verrà mascherato? Per favore prendi il mio algoritmo e miglioralo o aiutami a crearne uno nuovo.
Grazie in anticipo.
Grazie per cosa? Non hai nemmeno fatto una domanda, ma comunque: sei il benvenuto. – Stephan
Aggiornato il testo, mi dispiace non è stato chiaro. – Blaskovicz