2014-05-07 5 views
0

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:

+0

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

Répondre

0

Le site Web de Microsoft ne semble pas inclure les valeurs. Toutefois, la documentation de l'API WINE indique que les valeurs sont comprises entre 0 et 240.

https://source.winehq.org/WineAPI/ColorRGBToHLS.html

+0

Cela ne donne pas exactement une référence de source racine, mais c'est le plus proche que j'ai vu. Si c'est bon pour le vin, c'est assez bon pour moi. –

0

Rich Newman a créé un HSLColor Class. Vous pourriez trouver l'utilisation de cela est mieux alors en utilisant les fonctions Win32.

Pour répondre à votre question initiale, la classe de Rich Newman semble utiliser 240 comme valeur que vous recherchez.

Questions connexes