Détecter et filtrer des couleurs trop claires ou foncées en JAVA

Dans la dernière application Android que j’ai développé, j’utilise un Color Picker (voir ci-dessous) plutôt sympa mais les couleurs trop claires posent problème. J’ai défini une couleur de police très claire (presque blanche) et si l’utilisateur sélectionne une couleur de fond claire, on n’y voit plus rien!

J’ai donc trouvé une solution et j’ai décidé de partager cette ‘astuce’ avec vous.

colorpicker_android_java

 

Etape 1 : Récupérer/convertir la couleur

Pour commencer, il faut avoir la couleur au format “int(si c’est le cas, passez directement à l’étape 2).

Si vous récupérez une couleur au format hexadécimal, vous devez la convertir en utilisant les deux lignes ci-dessous :

String hex = "#FFFFFF";
int value = Integer.parseInt(myString.replaceFirst("#", ""), 16); 

Etape 2 : Obtenir le taux de luminosité

Le taux de luminosité s’obtient à partir de l’integer d’une couleur.

Si le taux est inférieur à 128, la couleur se rapproche du noir.

Si le taux est supérieur à 128, la couleur se rapproche du blanc.

 public static int getBrightness(int rgb)
{
int bri= ( 77 * ((argb>>16)&255)
+ 150 * ((argb>>8)&255)
+ 29 * ((argb)&255))>>8;
return bri;
}

Il vous suffit alors de tester le taux de luminosité en utilisant la valeur retournée par la méthode “getBrightness“.

Etape 3 : Test de la valeur

Ci-dessous, je filtre les couleurs supérieures à 150 (donc claires, se rapprochant du blanc).

 int lum = getBrightness(_col);
if (lum > 150)
{
_msgerreur = "Cette couleur est trop claire, vous n'y verrez rien.";
Toast.makeText(getBaseContext(), "Erreur: " + _msgerreur, Toast.LENGTH_SHORT).show();
}