Пример #1
0
        // ******************************************************************
        public Color GetNextColor()
        {
            while (true)
            {
                var    hue = _random.NextDouble() * 360;
                double saturation;
                double luminance;

                // To go quicker and darker for white background
                // saturation = Math.Sqrt(_random.NextDouble()) ;
                // luminance = Math.Sqrt(_random.NextDouble());

                // To go quicker and lighter for dark background
                //saturation = Math.Pow(_random.NextDouble(), 2.0);
                //luminance = Math.Pow(_random.NextDouble(), 2.0);

                // Less performance but higher compatibility
                saturation = _random.NextDouble();
                luminance  = _random.NextDouble();

                var hsl = new HSL(hue, saturation, luminance);
                var c   = hsl.ToColor();

                if (IsFarEnoughFromExistingColor(c, DistanceMin))
                {
                    UsedColors.Add(new ColorRatio(c));
                    DistanceMin += .02;
                    _badTryCount = 0;
                    return(c);
                }

                _badTryCount++;
                if (_badTryCount > Accuracy)
                {
                    _badTryCount = 0;
                    DistanceMin -= .002;
                }
            }
        }
 /// <summary>
 ///     Converts HSL to RGB.
 /// </summary>
 /// <param name="hsl">The HSL structure to convert.</param>
 public static RGB HSLtoRGB(HSL hsl)
 {
     return HSLtoRGB(hsl.Hue, hsl.Saturation, hsl.Luminance);
 }
 /// <summary>
 ///     Converts HSL to .net Color.
 /// </summary>
 /// <param name="hsl">The HSL structure to convert.</param>
 public static Color HSLtoColor(HSL hsl)
 {
     return HSLtoColor(hsl.Hue, hsl.Saturation, hsl.Luminance);
 }
        /// <summary>
        ///     Gets the "distance" between two colors.
        /// </summary>
        /// EO Added 2011-09-08
        /// <param name="color1">First color.</param>
        /// <param name="color2">Second color.</param>
        public static double GetColorDistance(HSL hsl1, HSL hsl2)
        {
            var rgb1 = HSLtoRGB(hsl1);
            var rgb2 = HSLtoRGB(hsl2);

            return GetColorDistance(rgb1.Red, rgb1.Green, rgb1.Blue, rgb2.Red, rgb1.Green, rgb1.Blue);
        }
 /// <summary>
 ///     Converts HSL to .net Color.
 /// </summary>
 /// <param name="hsl">The HSL structure to convert.</param>
 public static Color HSLtoColor(HSL hsl)
 {
     return(HSLtoColor(hsl.Hue, hsl.Saturation, hsl.Luminance));
 }
 /// <summary>
 ///     Converts HSL to RGB.
 /// </summary>
 /// <param name="hsl">The HSL structure to convert.</param>
 public static RGB HSLtoRGB(HSL hsl)
 {
     return(HSLtoRGB(hsl.Hue, hsl.Saturation, hsl.Luminance));
 }
        // ******************************************************************
        public Color GetNextColor()
        {
            while (true)
            {
                var hue = _random.NextDouble()*360;
                double saturation;
                double luminance;

                // To go quicker and darker for white background
                // saturation = Math.Sqrt(_random.NextDouble()) ;
                // luminance = Math.Sqrt(_random.NextDouble());

                // To go quicker and lighter for dark background
                //saturation = Math.Pow(_random.NextDouble(), 2.0);
                //luminance = Math.Pow(_random.NextDouble(), 2.0);

                // Less performance but higher compatibility
                saturation = _random.NextDouble();
                luminance = _random.NextDouble();

                var hsl = new HSL(hue, saturation, luminance);
                var c = hsl.ToColor();

                if (IsFarEnoughFromExistingColor(c, DistanceMin))
                {
                    UsedColors.Add(new ColorRatio(c));
                    DistanceMin += .02;
                    _badTryCount = 0;
                    return c;
                }

                _badTryCount++;
                if (_badTryCount > Accuracy)
                {
                    _badTryCount = 0;
                    DistanceMin -= .002;
                }
            }
        }