internal static ColorHSL FromSystemDrawingColor(System.Drawing.Color color)
 {
     ColorHSL rv = new ColorHSL
     {
         Hue = color.GetHue() / 360.0,
         Saturation = color.GetSaturation(),
         Lightness = color.GetBrightness()
     };
     return rv;
 }
Esempio n. 2
0
        internal static ColorHSL FromSystemDrawingColor(System.Drawing.Color color)
        {
            ColorHSL rv = new ColorHSL
            {
                Hue        = color.GetHue() / 360.0,
                Saturation = color.GetSaturation(),
                Lightness  = color.GetBrightness()
            };

            return(rv);
        }
        private static ColorHSL MatchColor(IEnumerable <ColorHSL> allowable, ColorHSL source)
        {
            ColorHSL bestMatch      = default(ColorHSL);
            double   bestMatchValue = double.MaxValue;

            foreach (var color in allowable)
            {
                double[] diffs      = new double[] { color.Hue - source.Hue, color.Lightness - source.Lightness, color.Saturation - source.Saturation };
                double   matchValue = diffs.Select(d => d * d).Sum();
                if (matchValue < bestMatchValue)
                {
                    bestMatchValue = matchValue;
                    bestMatch      = color;
                }
            }
            return(bestMatch);
        }
 private static ColorRGBA MatchColor(IEnumerable <Color> allowable, ColorRGBA source, ColorMatchingAlgorithm colorMatchingAlgorithm)
 {
     if (colorMatchingAlgorithm == ColorMatchingAlgorithm.HSV)
     {
         ColorHSL bestHSL = MatchColor(allowable.Select(c => ColorHSL.FromWindowsMediaColor(c)).ToArray(),
                                       ColorHSL.FromRGBA(source)
                                       );
         return(bestHSL.ToColorRGBA());
     }
     else
     {
         ColorRGBA bestRGBA = MatchColor(allowable.Select(c => new ColorRGBA {
             Alpha = c.A, Blue = c.B, Green = c.G, Red = c.R
         }).ToArray(),
                                         source);
         return(bestRGBA);
     }
 }