// credit to foley/van dam gfx book public static HSBColor ColorToHsb(Color c) { float minval,maxval,delta; float r=c.R/255.0f,g=c.G/255.0f,b=c.B/255.0f; HSBColor hsbc = new HSBColor(); maxval = Math.Max( r, Math.Max(g,b) ); minval = Math.Min( r, Math.Min(g,b) ); hsbc.B = (maxval + minval) / 2.0f; if(maxval==minval) { // grayscale hsbc.S = 0.0f; hsbc.H = 0.0f; return hsbc; } if(hsbc.B < 0.5f) hsbc.S = (maxval - minval) / (maxval + minval); else hsbc.S = (maxval - minval) / (2.0f - maxval - minval); delta = maxval-minval; if(r==maxval) hsbc.H = (g-b) / delta; else if (g==maxval) hsbc.H = 2.0f + (b-r) / delta; else if (b==maxval) hsbc.H = 4.0f + (r-g) / delta; hsbc.H = hsbc.H * 60.0f; while(hsbc.H<0.0f) hsbc.H += 360.0f; while(hsbc.H>360.0f) hsbc.H -= 360.0f; return hsbc; }