Fondamentalement, j'ai besoin de connaître la plage valide pour H, L et S dans les fonctions win32 comme ColorHLSToRGB(H, L, S)
.Valeurs de couleur max par défaut dans les coordonnées cylindriques
edit: La prémisse de base de cette question est erronée. Inverser de cette manière ne donne pas toujours une couleur contrastée, surtout lorsque la couleur à contraster est proche du gris. J'ai fini par utiliser le noir ou le blanc comme couleur de contraste. Il serait toujours agréable d'avoir cette réponse et de savoir ce que HLSMAX est par défaut cependant. J'essaye d'obtenir une couleur contrastante pour le texte donné une couleur d'arrière-plan. À cette fin, j'ai écrit le code suivant, mais je ne suis pas sûr de la gamme de valeurs pour H, L et S. 240 semble être le numéro donné sur quelques sites (voir les références que j'ai utilisées ci-dessous et/ou google HLSMAX par vous-même) mais c'est si bas que la précision sera perdue. Ça ne semble pas juste ... Sans parler de ne pas avoir une couleur contrastée. La couleur est la même.
partie est douteuse valeur de HLSMAX en première ligne dans contrastColor
[DllImport("shlwapi.dll")]
static extern void ColorRGBToHLS(int RGB, ref int H, ref int L, ref int S);
[DllImport("shlwapi.dll")]
static extern RGB ColorHLSToRGB(int H, int L, int S);
[StructLayout(LayoutKind.Sequential)]
public struct RGB
{
public byte r, g, b;
public RGB(Color colorIn)
{
r = colorIn.R;
g = colorIn.G;
b = colorIn.B;
}
public Int32 ToInt32()
{ return BitConverter.ToInt32(new byte[4] {r, g, b, 0},0); }
public Color ToColor()
{ return Color.FromRgb(r, g, b); }
}
private Color contrastColor(Color color)
{
int HLSMAX=240;//Is this right??? It seems too low!
RGB rgb = new RGB(color);
int h=0, l=0, s=0;
ColorRGBToHLS(rgb.ToInt32(), ref h, ref l, ref s);
h=(h+(HLSMAX/2))%HLSMAX;
l = HLSMAX - l;
rgb = ColorHLSToRGB(h, l, s);
return Color.FromArgb(color.A, rgb.r, rgb.g, rgb.b);
}
Références utilisées:
- MSN 'How to' on converting colors
- Wikipedia article detailing cylindrical color coordinates
- Pinvoke.net entry for colorhlstorgb
- Pinvoke.net entry for colorrgbtohls
donc d'ici http://www.codeproject.com/Articles/144/CColor-RGB-and-HLS-combined-in-one-class Ils semblent se référer à la partie Hue comme 0 à 360 (puisque c'est en forme de cercle), et la lumière et la saturation est de 0 à 1. Peut-être que cela aide. – user3003304