Example #1
0
        public Hsl BuildToHsl(string value)
        {
            double h, s, l;

            var hashGenerator = new BKDRHash();

            var hash = hashGenerator.Generate(value);

            if (_options.HueRanges.Count > 0)
            {
                var rangeIndex = hash % Convert.ToUInt64(_options.HueRanges.Count);

                //TODO: Convert int? prevent error
                var hueValue = (Hue)_options.HueRanges[(int)rangeIndex];

                var hueResolution = Convert.ToUInt64(727);
                h = ((hash / Convert.ToUInt64(_options.HueRanges.Count)) % hueResolution)
                    * (Convert.ToUInt64(hueValue.Max) - Convert.ToUInt64(hueValue.Min)) / hueResolution + Convert.ToUInt64(hueValue.Min);
            }
            else
            {
                h = hash % 359; // note that 359 is a prime
            }

            hash = (hash / 360);
            var sIndex = (hash % (ulong)_options.S.Count);

            s = (double)_options.S[(int)sIndex];

            hash = (hash / (ulong)_options.S.Count);
            var lIndex = (hash % (ulong)_options.L.Count);

            l = (double)_options.L[(int)lIndex];

            var hslResult = new Hsl(h, s, l);

            return(hslResult);
        }