public static IEnumerable <System.Drawing.Color> Range(this System.Drawing.Color firstColor, System.Drawing.Color lastColor, int count) { float stepHueClockwise = GetStepping(firstColor.GetHue(), lastColor.GetHue(), count, Direction.Clockwise); float stepHueCounterClockwise = GetStepping(firstColor.GetHue(), lastColor.GetHue(), count, Direction.CounterClockwise); if (Math.Abs(stepHueClockwise) >= Math.Abs(stepHueCounterClockwise)) { return(Range(firstColor, lastColor, count, Direction.Clockwise)); } else { return(Range(firstColor, lastColor, count, Direction.CounterClockwise)); } }
public ColorPickerPalette() { InitializeComponent(); Standard = new List <Brush>() { Brushes.Transparent, Brushes.White, Brushes.Gray, Brushes.Black, Brushes.Red, Brushes.Green, Brushes.Blue, Brushes.Cyan, Brushes.Yellow, Brushes.Orange, Brushes.Violet }; var more = typeof(Brushes).GetProperties() .Select(x => x.GetValue(null) as Brush); more = more.OrderBy(x => { System.Windows.Media.Color winColor = ((SolidColorBrush)x).Color; System.Drawing.Color drawColor = System.Drawing.Color.FromArgb(winColor.R, winColor.G, winColor.B); return(drawColor.GetHue() + drawColor.GetSaturation()); }); MoreLB.ItemsSource = more; Loaded += ColorPickerPalette_Loaded; }
public Window1() { InitializeComponent(); InitializeBackgroundWorker(); expander1.Expanded += new RoutedEventHandler(expander1_Expanded); expander1.Collapsed += new RoutedEventHandler(expander1_Collapsed); expander1.IsExpanded = false; SystemCore.SystemAbstraction.WindowManagement.GlassExtender.GlassBackground(this); { SolidColorBrush actual_brush = (SolidColorBrush)expander1.Background; _default_color = actual_brush.Color; System.Drawing.Color actual_color = System.Drawing.Color.FromArgb(1, actual_brush.Color.R, actual_brush.Color.G, actual_brush.Color.B); float current_hue = actual_color.GetHue(); float current_saturation = actual_color.GetSaturation(); float current_brightness = actual_color.GetBrightness(); Color new_color = HsvToRgb(current_hue, current_saturation, current_brightness / 1.25); new_color.A = 100; _expanded_color = new_color; } if (Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor > 0) { _is_windows_seven = true; } StartDownload(); }
/// <summary> /// Converts the given RGB color values into a HSV color. /// </summary> /// <param name="color"></param> /// <returns></returns> public static HsvColor RGBToHSV(Color?color) { if (color is null) { return(new HsvColor(0, 0, 0)); } System.Drawing.Color convColor = System.Drawing.Color.FromArgb(color.Value.A, color.Value.R, color.Value.G, color.Value.B); int max = Math.Max(convColor.R, Math.Max(convColor.G, convColor.B)); int min = Math.Min(convColor.R, Math.Min(convColor.G, convColor.B)); double hue = convColor.GetHue(); if (hue > 359) { hue = 359; } double saturation = (max == 0) ? 0 : 1d - (1d * min / max); double value = max / 255d; return(new HsvColor(hue, saturation, value)); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { SolidColorBrush result = new SolidColorBrush(); if (value != null) { try { Color inputColor = ((SolidColorBrush)value).Color; System.Drawing.Color color = System.Drawing.Color.FromArgb(inputColor.A, inputColor.R, inputColor.G, inputColor.B); Color lockedColor = ConvertHSVtoRGB(color.GetHue(), color.GetSaturation(), LOCKED_BRIGHTNESS_VALUE); result.Color = lockedColor; } catch { result.Color = Colors.Transparent; } } else { result.Color = Colors.Transparent; } return(result); }
public HSLColor(Color c) { System.Drawing.Color c1 = System.Drawing.Color.FromArgb(255, c.R, c.G, c.B); hue = c1.GetHue(); saturation = c1.GetSaturation(); luminance = c1.GetBrightness(); }
private System.Drawing.Color getAverageColor(System.Drawing.Bitmap bm) { var list = new Dictionary <System.Drawing.Color, int>(); int addR = 0; int addG = 0; int addB = 0; System.Drawing.Bitmap myImage = new System.Drawing.Bitmap(bm, new System.Drawing.Size(50, 50)); for (int x = 0; x < myImage.Width; x++) { for (int y = 0; y < myImage.Height; y++) { System.Drawing.Color color = myImage.GetPixel(x, y); if (!list.ContainsKey(color)) { list.Add(color, 1); } else { list[color]++; } } } System.Drawing.Color keyOfMaxValue = list.Aggregate((x, y) => x.Value > y.Value ? x : y).Key; if (keyOfMaxValue.GetBrightness() < 0.5F) { Color higherBrightness = ColorFromHSV(keyOfMaxValue.GetHue(), keyOfMaxValue.GetSaturation(), 0.85F); keyOfMaxValue = System.Drawing.Color.FromArgb(higherBrightness.R, higherBrightness.G, higherBrightness.B); } System.Drawing.Color returnColor = System.Drawing.Color.FromArgb((int)keyOfMaxValue.R + addR, (int)keyOfMaxValue.G + addG, (int)keyOfMaxValue.B + addB); return(returnColor); }
private static string ColorToHsl(System.Drawing.Color c) { var h = Math.Round(c.GetHue()); var s = Math.Round(c.GetSaturation() * 100); var l = Math.Round(c.GetBrightness() * 100); return("hsl(" + h + ", " + s + "%, " + l + "%)"); }
public int Compare(object firstItem, object secondItem) { if (firstItem == null || secondItem == null) { return(-1); } ColorItem colorItem1 = ( ColorItem )firstItem; ColorItem colorItem2 = ( ColorItem )secondItem; System.Drawing.Color drawingColor1 = System.Drawing.Color.FromArgb(colorItem1.Color.A, colorItem1.Color.R, colorItem1.Color.G, colorItem1.Color.B); System.Drawing.Color drawingColor2 = System.Drawing.Color.FromArgb(colorItem2.Color.A, colorItem2.Color.R, colorItem2.Color.G, colorItem2.Color.B); // Compare Hue double hueColor1 = Math.Round(( double )drawingColor1.GetHue(), 3); double hueColor2 = Math.Round(( double )drawingColor2.GetHue(), 3); if (hueColor1 > hueColor2) { return(1); } else if (hueColor1 < hueColor2) { return(-1); } else { // Hue is equal, compare Saturation double satColor1 = Math.Round(( double )drawingColor1.GetSaturation(), 3); double satColor2 = Math.Round(( double )drawingColor2.GetSaturation(), 3); if (satColor1 > satColor2) { return(1); } else if (satColor1 < satColor2) { return(-1); } else { // Saturation is equal, compare Brightness double brightColor1 = Math.Round(( double )drawingColor1.GetBrightness(), 3); double brightColor2 = Math.Round(( double )drawingColor2.GetBrightness(), 3); if (brightColor1 > brightColor2) { return(1); } else if (brightColor1 < brightColor2) { return(-1); } } } return(0); }
//https://stackoverflow.com/questions/359612/how-to-change-rgb-color-to-hsv public static void ColorToHsv(this System.Drawing.Color color, out double hue, out double saturation, out double value) { var max = Utils.Greatest(color.R, color.G, color.B); var min = Utils.Lowest(color.R, color.G, color.B); hue = color.GetHue(); saturation = (max == 0) ? 0 : 1d - (1d * min / max); value = max / 255d; }
// Normalised so that h is 0..1, not 0..360 public static void ColorToHSV(System.Drawing.Color color, out float hue, out float saturation, out float value) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); hue = color.GetHue() / 360.0f; saturation = (float)(max == 0 ? 0 : 1d - 1d * min / max); value = (float)(max / 255d); }
// See: https://stackoverflow.com/a/1335465 public static void DrawingColorToHsv(this DColor color, out double hue, out double saturation, out double value) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); hue = color.GetHue(); saturation = max == 0 ? 0 : 1d - 1d * min / max; value = max / 255d; }
public static void ColorToHSV(System.Drawing.Color color, out double hue, out double saturation, out double value) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); hue = color.GetHue(); saturation = (max == 0) ? 0 : 1d - (1d * min / max); value = max / 255d; }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public static void ColorToHSV(Color color, out double hue, out double saturation, out double value) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); hue = color.GetHue(); saturation = (max == 0) ? 0 : 1d - (1d * min / max); value = max / 255d; }
void SendColorToArduino(SerialPort port) { Plugin.log.Debug("Before color boost: " + redLeft + " " + greenLeft + " " + blueLeft); Plugin.log.Debug("Before color boost: " + redRight + " " + greenRight + " " + blueRight); int r1, g1, b1; int r2, g2, b2; System.Drawing.Color colorLeft = System.Drawing.Color.FromArgb(redLeft, greenLeft, blueLeft); System.Drawing.Color colorRight = System.Drawing.Color.FromArgb(redRight, greenRight, blueRight); double h1 = colorLeft.GetHue(); double h2 = colorRight.GetHue(); Plugin.log.Debug("double h1 = " + h1); Plugin.log.Debug("double h2 = " + h2); HsvToRgb(h1, 1, 1, out r1, out g1, out b1); HsvToRgb(h2, 1, 1, out r2, out g2, out b2); Plugin.log.Debug("After color boost: " + r1 + " " + g1 + " " + b1); Plugin.log.Debug("After color boost: " + r2 + " " + g2 + " " + b2); Color rightColor = new Color(r1, g1, b1); Color leftColor = new Color(r2, g2, b2); decimal p_r = Convert.ToDecimal(redLeft.ToString()); //Primary Red decimal p_g = Convert.ToDecimal(greenLeft.ToString()); //Primary Green decimal p_b = Convert.ToDecimal(blueLeft.ToString()); //Primary Blue decimal s_r = Convert.ToDecimal(redRight.ToString()); //Secondary Red decimal s_g = Convert.ToDecimal(greenRight.ToString()); //Secondary Green decimal s_b = Convert.ToDecimal(blueRight.ToString()); //Secondary Blue byte[] colorsByte = new byte[8]; colorsByte[0] = Convert.ToByte('$'); colorsByte[1] = Convert.ToByte(p_r); colorsByte[2] = Convert.ToByte(p_g); colorsByte[3] = Convert.ToByte(p_b); colorsByte[4] = Convert.ToByte(s_r); colorsByte[5] = Convert.ToByte(s_g); colorsByte[6] = Convert.ToByte(s_b); colorsByte[7] = Convert.ToByte('%'); for (int x = 0; x < colorsByte.Length; x++) { try { Plugin.log.Info("Writing: " + colorsByte[x]); } catch (Exception e) { Plugin.log.Error(e); } } port.Write(colorsByte, 0, 8); }
public static HSB RGBToHSB(System.Drawing.Color c) { HSB hsb = new HSB(); hsb.H = c.GetHue(); hsb.S = c.GetSaturation(); hsb.B = c.GetBrightness(); hsb.A = c.A; return(hsb); }
/// <summary> /// 按比例,获取指定色以比例为饱和度的色 /// </summary> /// <param name="scale">比例, 0-1</param> /// <param name="orgcolor">原始色</param> /// <returns></returns> public static Color getColorSaturation(double scale, Color orgcolor) { Color color; System.Drawing.Color cOrg = System.Drawing.Color.FromArgb(orgcolor.A, orgcolor.R, orgcolor.G, orgcolor.B); //color = FromAhsb(255, cOrg.GetHue(), (float)scale, 0.5f); System.Drawing.Color dc = HSBColor.FromHSB(new HSBColor(255, cOrg.GetHue(), (float)scale * 255, 255f)); color = Color.FromArgb(dc.A, dc.R, dc.G, dc.B); return(color); }
public static MyColor Classify(int red, int green, int blue) { SystemColor color = SystemColor.FromArgb(red, green, blue); float hue = color.GetHue(); float sat = color.GetSaturation(); float lgt = color.GetBrightness(); MyColor ans = MyColor.None; if (lgt < 0.2) { ans = MyColor.Black; } else if (lgt > 0.8) { ans = MyColor.White; } else if (sat < 0.25) { ans = MyColor.Gray; } else if (hue < 30) { ans = MyColor.Red; } else if (hue < 90) { ans = MyColor.Yellow; } else if (hue < 150) { ans = MyColor.Green; } else if (hue < 210) { ans = MyColor.Cyan; } else if (hue < 270) { ans = MyColor.Blue; } else if (hue < 330) { ans = MyColor.Magenta; } else { ans = MyColor.Red; } return(ans); }
/// <summary> /// Color to HSV converter /// </summary> /// <param name="color"></param> /// <returns></returns> public static System.Drawing.Color ColorToHSV(System.Drawing.Color color) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); var hue = (color.GetHue() + 180) % 360; var saturation = (max == 0) ? 0 : 1d - (1d * min / max); var value = max / 255d; return(HSVToRGB(hue, saturation, value)); }
// http://stackoverflow.com/a/1626175/1069200 public static Hsv From(System.Drawing.Color color) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); var hue = color.GetHue(); var saturation = max == 0 ? 0 : 1d - (1d * min / max); var value = max / 255d; return(new Hsv(hue, saturation, value)); }
private static string ColorToHsv(System.Drawing.Color c) { int max = Math.Max(c.R, Math.Max(c.G, c.B)); int min = Math.Min(c.R, Math.Min(c.G, c.B)); var h = Math.Round(c.GetHue()); var s = (max == 0) ? 0 : 1d - (1d * min / max); var v = max / 255d; return("hsv(" + h + ", " + Math.Round(s * 100) + ", " + Math.Round(v * 100) + ")"); }
public static double Distance(this Color source, Color target) { System.Drawing.Color c1 = source.ToDrawingColour(); System.Drawing.Color c2 = target.ToDrawingColour(); double hue = c1.GetHue() - c2.GetHue(); double saturation = c1.GetSaturation() - c2.GetSaturation(); double brightness = c1.GetBrightness() - c2.GetBrightness(); return((hue * hue) + (saturation * saturation) + (brightness * brightness)); }
internal static ColorHSL FromSystemDrawingColor(System.Drawing.Color color) { ColorHSL rv = new ColorHSL { Hue = color.GetHue() / 360.0, Saturation = color.GetSaturation(), Lightness = color.GetBrightness() }; return(rv); }
public void ColorToHSV(Color tcolor, ref double saturation, ref double value) { System.Drawing.Color color = System.Drawing.Color.FromArgb(tcolor.A, tcolor.R, tcolor.G, tcolor.B); int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); Hue = color.GetHue(); saturation = (max == 0) ? 0 : 1.0D - (1.0D * min / max); value = max / 255.0D; }
public static void ColorToAHSV(Color color, out byte alpha, out double hue, out double saturation, out double value) { System.Drawing.Color sysColor = System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B); int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); alpha = color.A; hue = sysColor.GetHue(); saturation = (max == 0) ? 0 : 1d - (1d * min / max); value = max / 255d; }
public static Vector3 ColorToHSV(this Color rgb) { System.Drawing.Color color = System.Drawing.Color.FromArgb(rgb.R, rgb.G, rgb.B); int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); float hue = color.GetHue() / 360f; float saturation = (max == 0) ? 0 : 1f - (1f * min / max); float value = max / 255f; return(new Vector3(hue, saturation, value)); }
private void SendColorToArduino(SerialPort port) { Plugin.log.Debug($"Before color boost: {redLeft} {greenLeft} {blueLeft}"); Plugin.log.Debug($"Before color boost: {redRight} {greenRight} {blueRight}"); System.Drawing.Color colorLeft = System.Drawing.Color.FromArgb(redLeft, greenLeft, blueLeft); System.Drawing.Color colorRight = System.Drawing.Color.FromArgb(redRight, greenRight, blueRight); double h1 = colorLeft.GetHue(); double h2 = colorRight.GetHue(); Plugin.log.Debug($"double h1 = {h1}"); Plugin.log.Debug($"double h2 = {h2}"); HsvToRgb(h1, 1, 1, out int r1, out int g1, out int b1); HsvToRgb(h2, 1, 1, out int r2, out int g2, out int b2); Plugin.log.Debug($"After color boost: {r1} {g1} {b1}"); Plugin.log.Debug($"After color boost: {r2} {g2} {b2}"); var rightColor = new Color(r1, g1, b1); var leftColor = new Color(r2, g2, b2); decimal PrimaryRed = Convert.ToDecimal(redLeft.ToString()); decimal PrimaryGreen = Convert.ToDecimal(greenLeft.ToString()); decimal PrimaryBlue = Convert.ToDecimal(blueLeft.ToString()); decimal SecondaryRed = Convert.ToDecimal(redRight.ToString()); decimal SecondaryGreen = Convert.ToDecimal(greenRight.ToString()); decimal SecondaryBlue = Convert.ToDecimal(blueRight.ToString()); byte[] colorsByte = new byte[8]; colorsByte[0] = Convert.ToByte('$'); colorsByte[1] = Convert.ToByte(PrimaryRed); colorsByte[2] = Convert.ToByte(PrimaryGreen); colorsByte[3] = Convert.ToByte(PrimaryBlue); colorsByte[4] = Convert.ToByte(SecondaryRed); colorsByte[5] = Convert.ToByte(SecondaryGreen); colorsByte[6] = Convert.ToByte(SecondaryBlue); colorsByte[7] = Convert.ToByte('%'); for (int i = 0; i < colorsByte.Length; i++) { try { Plugin.log.Info("Writing: " + colorsByte[i]); } catch (Exception e) { Plugin.log.Error(e); } } port.Write(colorsByte, 0, 8); }
// Converts an RGB color to an HSV color. public static HsvColor ConvertRgbToHsv(int r, int b, int g) { System.Drawing.Color otherColor = System.Drawing.Color.FromArgb(255, r, b, g); return (new HsvColor( otherColor.GetHue(), otherColor.GetSaturation(), otherColor.GetBrightness())); /* * * 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; * * } * * HsvColor hsvColor = new HsvColor(); * hsvColor.H = h; * hsvColor.S = s; * hsvColor.V = v / 255; * * return hsvColor; */ }
// /// <summary> /// Converts RGB to HSL /// </summary> /// <remarks>Takes advantage of whats already built in to .NET by using the Color.GetHue, Color.GetSaturation and Color.GetBrightness methods</remarks> /// <param name="c">A Color to convert</param> /// <returns>An HSL value</returns> public static HSL RGB_to_HSL(Color c) { System.Drawing.Color color = System.Drawing.Color.FromArgb(c.A, c.R, c.G, c.B); var hsl = new HSL(); hsl.H = color.GetHue() / 360.0; // we store hue as 0-1 as opposed to 0-360 hsl.L = color.GetBrightness(); hsl.S = color.GetSaturation(); hsl.A = color.A / 255.0; return(hsl); }
/// <summary> /// 按比例,获取两个色之间的色 /// </summary> /// <param name="scale">比例, 0-1之间的数据</param> /// <param name="colorStart">开始颜色</param> /// <param name="colorEnd">结束颜色</param> /// <returns></returns> public static Color getColorBetween(double scale, Color colorStart, Color colorEnd) { Color color; System.Drawing.Color cStart = System.Drawing.Color.FromArgb(colorStart.A, colorStart.R, colorStart.G, colorStart.B); System.Drawing.Color cEnd = System.Drawing.Color.FromArgb(colorEnd.A, colorEnd.R, colorEnd.G, colorEnd.B); float hstart = cStart.GetHue(); float hend = cEnd.GetHue(); float hue = hstart + (hend - hstart) * (float)scale; System.Drawing.Color dc = HSBColor.FromHSB(new HSBColor(255, hue * 255 / 360, 255f, 255f)); color = Color.FromArgb(dc.A, dc.R, dc.G, dc.B); return(color); }
public static HsvColor FromColor( System.Drawing.Color color) { int max = Math.Max(color.R, Math.Max(color.G, color.B)); int min = Math.Min(color.R, Math.Min(color.G, color.B)); var h = color.GetHue(); var s = max == 0 ? 0 : 1d - 1d * min / max; var v = max / 255d; return(new HsvColor( h, s, v)); }