/// <summary> /// Converts an RGB color to an HSV color /// </summary> /// <param name="r">Red</param> /// <param name="b">Blue</param> /// <param name="g">Green</param> /// <returns>A HsvColor object.</returns> public static HsvColor ConvertRgbToHsv(int r, int b, int g) { double h = 0, s; double min = Math.Min(Math.Min(r, g), b); double v = Math.Max(Math.Max(r, g), b); double delta = v - min; if (v == 0.0) { s = 0; } else s = delta / v; if (s == 0) h = 0.0; else { if (r == v) h = (g - b) / delta; else if (g == v) h = 2 + (b - r) / delta; else if (b == v) h = 4 + (r - g) / delta; h *= 60; if (h < 0.0) h = h + 360; } var hsvColor = new HsvColor(); hsvColor.H = h; hsvColor.S = s; hsvColor.V = v / 255; return hsvColor; }
private void DetermineColor(Point p) { var hsv = new HsvColor(360 - ColorSlider.Value, 1, 1); hsv.S = p.X; hsv.V = 1 - p.Y; SelectedColor = ColorUtilities.ConvertHsvToRgb(hsv.H, hsv.S, hsv.V, SelectedColor.A); CurrentColor.Background = new SolidColorBrush(SelectedColor); #region Update TextBoxes _isUpdating = true; AlphaText.Value = SelectedColor.A; RedTextBox.Value = SelectedColor.R; GreenText.Value = SelectedColor.G; BlueText.Value = SelectedColor.B; HexadecimalText.Text = SelectedColor.ToString(); _isUpdating = false; #endregion }
/// <summary> /// Converts an RGB color to an HSV color /// </summary> /// <param name="color">Color</param> /// <returns>A HsvColor object.</returns> public static HsvColor ConvertRgbToHsv(this Color color) { double h = 0, s; double min = Math.Min(Math.Min(color.R, color.G), color.B); double v = Math.Max(Math.Max(color.R, color.G), color.B); double delta = v - min; if (v == 0.0) { s = 0; } else s = delta / v; if (s == 0) h = 0.0; else { if (color.R == v) h = (color.G - color.B) / delta; else if (color.G == v) h = 2 + (color.B - color.R) / delta; else if (color.B == v) h = 4 + (color.R - color.G) / delta; h *= 60; if (h < 0.0) h = h + 360; } var hsvColor = new HsvColor(); hsvColor.H = h; hsvColor.S = s; hsvColor.V = v / 255; return hsvColor; }