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