Question

Je ne suis pas sûr de savoir comment poser cette question, mais voilà.

Je dessine un rectangle coloré rempli à l’écran. La couleur est sous la forme de R, G, B

Je souhaite ensuite dessiner du texte au-dessus du rectangle. Toutefois, la couleur du texte doit être telle qu'il offre le meilleur contraste, ce qui signifie qu'il est lisible.

Exemple:

Si je dessine un rectangle noir, la couleur évidente du texte serait le blanc.

Voici ce que j’ai essayé de faire. Je transmets à cette fonction la couleur du rectangle qui renvoie une couleur inversée que j’utilise ensuite pour mon texte.

Cela fonctionne, mais ce n'est pas la meilleure solution.

Des suggestions?

// eg. usage: Color textColor = GetInverseLuminance(rectColor);
private Color GetInverseLuminance(Color color)
{
    int greyscale = (int)(255 - ((color.R * 0.30f) + (color.G * 0.59f) + (color.B * 0.11f)));

    return Color.FromArgb(greyscale, greyscale, greyscale);
}
Était-ce utile?

La solution

Une approche simple garantissant une couleur sensiblement différente consiste à basculer le bit le plus haut de chaque composant du triple RVB.

Color inverse(Color c)
{
    return new Color(c.R ^ 0x80, c.G ^ 0x80, c.B ^ 0x80);
}

Si la couleur d'origine était # 1AF283, la mention "inverse" sera # 9A7203.

Le contraste sera significatif. Je ne donne aucune garantie sur l'esthétique.

Mise à jour, 2009/4/3: J'ai expérimenté cette technique, ainsi que d'autres. Résultats sur mon blog .

Autres conseils

La couleur la plus lisible sera le blanc ou le noir. La couleur la plus "apaisante" sera quelque chose qui ne sera ni blanc ni noir, ce sera une couleur qui contraste légèrement la couleur de votre fond. Il n'y a aucun moyen de le faire par programme parce que c'est subjectif. Vous ne trouverez pas la couleur la plus lisible pour tout le monde car tout le monde voit les choses différemment.

Quelques conseils sur les couleurs, notamment en ce qui concerne la juxtaposition de l’avant-plan et de l’arrière-plan, comme avec le texte.

L’œil humain est essentiellement un simple objectif et ne peut donc se concentrer efficacement que sur une couleur à la fois. Les objectifs utilisés dans la plupart des appareils photo modernes résolvent ce problème en utilisant plusieurs objectifs d'indices de réfraction différents (objectifs chromatiques), de sorte que toutes les couleurs soient nettes en même temps, mais que l'œil humain ne soit pas aussi avancé.

Pour cette raison, vos utilisateurs ne devraient avoir à se concentrer que sur une couleur à la fois pour lire le texte. Cela signifie que le premier plan est en couleur ou l'arrière-plan, mais jamais les deux à la fois. Ceci conduit à une condition généralement appelée vibration, dans laquelle l'œil modifie rapidement le focus entre les couleurs de l'avant-plan et de l'arrière-plan, en essayant de résoudre le problème. la forme, mais elle ne se résout jamais, la forme n’est jamais nette et entraîne une fatigue oculaire.

Votre fonction ne fonctionnera pas si vous la fournissez en RVB (127 127 127), car elle renverra exactement la même couleur. (modifier votre fonction pour retourner en noir ou en blanc améliorerait légèrement les choses)

La meilleure façon de toujours rendre les choses lisibles est d’avoir du texte blanc entouré de noir ou inversement.

On y parvient souvent en dessinant d'abord du texte noir en (x-1, y-1), (x + 1, y-1), (x + 1, y-1), (x + 1, x + 1 ), puis un texte blanc en (x, y).

Vous pouvez également dessiner un bloc noir semi-transparent, suivi d'un texte blanc non transparent. Cela garantit qu'il y aura toujours un certain contraste entre votre arrière-plan et votre texte.

pourquoi gris? soit noir ou blanc serait le meilleur. blanc sur les couleurs foncées, noir sur les couleurs claires. il suffit de voir si la luminance est supérieure à un seuil et de choisir l’un ou l’autre

(au fait, vous n'avez pas besoin des balises .net, c # ou asp.net)

Vous devez étudier une théorie des couleurs. Un programme appelé "Color Wheel Pro". est amusant de jouer avec et vous donnera l'idée générale.

Vous recherchez essentiellement des couleurs complémentaires pour une couleur donnée.

Cela dit, je pense que vous constaterez que si la théorie des couleurs est utile, vous avez toujours besoin d'un œil humain pour régler avec précision.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top