public void Update(RgbColor rgb) { double r = (rgb.R / 255.0); double g = (rgb.G / 255.0); double b = (rgb.B / 255.0); double min = Math.Min(Math.Min(r, g), b); double max = Math.Max(Math.Max(r, g), b); double delta = max - min; L = (max + min) / 2; if (delta == 0) { H = 0; S = 0.0f; } else { S = (L <= 0.5) ? (delta / (max + min)) : (delta / (2 - max - min)); double hue; if (r == max) { hue = ((g - b) / 6) / delta; } else if (g == max) { hue = (1.0f / 3) + ((b - r) / 6) / delta; } else { hue = (2.0f / 3) + ((r - g) / 6) / delta; } if (hue < 0) { hue += 1; } if (hue > 1) { hue -= 1; } H = (int)(hue * 360); } }
public void Update(RgbColor color) { double red = color.R; double green = color.G; double blue = color.B; K = HandleCorner(Math.Min(1.0 - red / 255.0, Math.Min(1.0 - green / 255.0, 1.0 - blue / 255.0))); C = HandleCorner((1.0 - (red / 255.0) - K) / (1.0 - K)); M = HandleCorner((1.0 - (green / 255.0) - K) / (1.0 - K)); Y = HandleCorner((1.0 - (blue / 255.0) - K) / (1.0 - K)); double HandleCorner(double value) { if (value < 0 || double.IsNaN(value)) { value = 0; } return(value); } }