protected override void OnValueChanged(double oldValue, double newValue) { base.OnValueChanged(oldValue, newValue); Color color = HsvColor.RGBFromHSV(new HsvColor(359 - newValue, 1, 1)); SelectedColor = color; }
/// <summary> /// Updates the currently selected color in the color canvas /// from the given HSV parameters. /// </summary> /// <param name="hue"></param> /// <param name="saturation"></param> /// <param name="value"></param> private void UpdateSelectedColorFromHSV(double hue, double saturation, double value) { var color = HsvColor.RGBFromHSV(new HsvColor(hue, saturation, value)); UpdateRGBValues(Color.FromArgb(A, color.R, color.G, color.B)); UpdateSelectedColor(); }
protected override void OnValueChanged(double oldValue, double newValue) { base.OnValueChanged(oldValue, newValue); // Color color = ColorUtilities.ConvertHsvToRgb(360 - newValue, 1, 1); Color color = HsvColor.RGBFromHSV(new HsvColor(360 - newValue, 1, 1)); SelectedColor = color; }
private void CalculateColor(Point p) { HsvColor hsv = new HsvColor(359 - _spectrumSlider.Value, p.X, 1 - p.Y); // var currentColor = ColorUtilities.ConvertHsvToRgb(hsv.Hue, hsv.Saturation, hsv.Value); var currentColor = HsvColor.RGBFromHSV(hsv); currentColor.A = A; SelectedColor = currentColor; string newColor = ColorUtilities.GetFormatedColorString(SelectedColor, UsingAlphaChannel); SetHexadecimalStringProperty(newColor, false); }
/*** Replaced with static converter code in HsvColor class * /// <summary> * /// Converts an RGB color to an HSV color. * /// </summary> * /// <param name="r"></param> * /// <param name="b"></param> * /// <param name="g"></param> * /// <returns></returns> * public static HsvColor ConvertRgbToHsv(int r, int b, int g) * { * double delta, min; * double h = 0, s, v; * * min = Math.Min(Math.Min(r, g), b); * v = Math.Max(Math.Max(r, g), b); * 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; * * } * * return new HsvColor( h, s, v / 255); * } * * /// <summary> * /// Converts an HSV color to an RGB color. * /// </summary> * /// <param name="h"></param> * /// <param name="s"></param> * /// <param name="v"></param> * /// <returns></returns> * public static Color ConvertHsvToRgb(double h, double s, double v) * { * double r = 0, g = 0, b = 0; * * if (s == 0) * { * r = v; * g = v; * b = v; * } * else * { * int i; * double f, p, q, t; * * if (h == 360) * h = 0; * else * h = h / 60; * * i = (int)Math.Truncate(h); * f = h - i; * * p = v * (1.0 - s); * q = v * (1.0 - (s * f)); * t = v * (1.0 - (s * (1.0 - f))); * * switch (i) * { * case 0: * { * r = v; * g = t; * b = p; * break; * } * case 1: * { * r = q; * g = v; * b = p; * break; * } * case 2: * { * r = p; * g = v; * b = t; * break; * } * case 3: * { * r = p; * g = q; * b = v; * break; * } * case 4: * { * r = t; * g = p; * b = v; * break; * } * default: * { * r = v; * g = p; * b = q; * break; * } * } * * } * * return Color.FromArgb(255, (byte)(Math.Round(r * 255)), (byte)(Math.Round(g * 255)), (byte)(Math.Round(b * 255))); * } ***/ /// <summary> /// Generates a list of colors with hues ranging from 0 to 360 and /// a saturation and value of 1. /// </summary> /// <returns></returns> public static List <Color> GenerateHsvSpectrum() { List <Color> colorsList = new List <Color>(8); // list of colors with hues ranging from 0 to 360 for (int i = 0; i < 29; i++) { // colorsList.Add(ColorUtilities.ConvertHsvToRgb(i * 12, 1, 1)); colorsList.Add(HsvColor.RGBFromHSV(new HsvColor(i * 12, 1, 1))); } // saturation and value of 1 // colorsList.Add(ColorUtilities.ConvertHsvToRgb(0, 1, 1)); colorsList.Add(HsvColor.RGBFromHSV(new HsvColor(0, 1, 1))); return(colorsList); }