Пример #1
0
        public int CompareTo(Color other)
        {
            int comparison;

            var thisCategory = GetColorCategory();

            comparison = ((int)thisCategory).CompareTo((int)other.GetColorCategory());
            if (comparison != 0)
            {
                return(comparison);
            }

            comparison = ColorConversion.RgbToLum(ColorConversion.ColorToRgb(this))
                         .CompareTo(ColorConversion.RgbToLum(ColorConversion.ColorToRgb(other)));
            if ((int)thisCategory % 2 == 0)
            {
                comparison = -comparison;
            }
            if (comparison != 0)
            {
                return(comparison);
            }

            return(comparison);
        }
Пример #2
0
        private ColorCategory GetColorCategory()
        {
            var rgb = ColorConversion.ColorToRgb(this);
            var hsv = ColorConversion.RgbToHsv(rgb);

            if (hsv[1] < 0.12f)
            {
                return(ColorCategory.Grays);
            }

            float lumCutoff;

            if (hsv[1] > 0.9)
            {
                lumCutoff = 0.1f;
            }
            else if (hsv[1] > 0.8)
            {
                lumCutoff = 0.13f;
            }
            else if (hsv[1] > 0.6)
            {
                lumCutoff = 0.19f;
            }
            else if (hsv[1] > 0.4)
            {
                lumCutoff = 0.22f;
            }
            else
            {
                lumCutoff = 0.28f;
            }

            var lum = Math.Sqrt(ColorConversion.RgbToLum(rgb));

            if (lum < lumCutoff)
            {
                return(ColorCategory.Grays);
            }

            if (hsv[0] <= 26)
            {
                return(ColorCategory.Red);
            }
            if (hsv[0] <= 44)
            {
                return(ColorCategory.Orange);
            }
            if (hsv[0] <= 69)
            {
                return(ColorCategory.Yellow);
            }
            if (hsv[0] <= 152)
            {
                return(ColorCategory.Green);
            }
            if (hsv[0] <= 184)
            {
                return(ColorCategory.Cyan);
            }
            if (hsv[0] <= 257)
            {
                return(ColorCategory.Blue);
            }
            if (hsv[0] <= 296)
            {
                return(ColorCategory.Purple);
            }
            if (hsv[0] <= 330)
            {
                return(ColorCategory.Pink);
            }
            return(ColorCategory.Red);
        }