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; }
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); } }