/// <summary> /// Converts a neutral grey color to a hued color with the same level of "grey". /// </summary> public static Color GreyscaleToColor(Color greyscale, Color pureColor) { if (ColorIsPartiallyClear(greyscale)) { greyscale = ConvertPartiallyClearToGrey(greyscale); } if (ColorIsBlack(greyscale)) { return(greyscale); } if (ColorIsWhite(greyscale)) { return(pureColor); } HSV greyscaleHSV = ConvertColors.ToHSV(greyscale); HSV pureColorHSV = ConvertColors.ToHSV(pureColor); Range fullRange = new Range(MAX_VALUE_AS_BLACK, 1); Range newRange = new Range(MAX_VALUE_AS_BLACK, pureColorHSV.Value); float adjustedValue = (float)Range.ConvertValue(fullRange, newRange, greyscaleHSV.Value); float adjustedSaturation = greyscaleHSV.Value * pureColorHSV.Saturation; HSV adjustedHSV = new HSV(pureColorHSV.Hue, adjustedSaturation, adjustedValue); Color adjustedColor = ConvertColors.ToColor(adjustedHSV); return(adjustedColor); }
private void Color_OnClick(object sender, EventArgs e) { Panel panel = sender as Panel; HSV hsv = ConvertColors.ToHSV(panel.BackColor); Hue = (int)hsv.Hue; }
public HuePanel(Color?startColor = null) { this.Height = TRACKBAR_HEIGHT + 50; this.Width = UNIT * 2; this.BorderStyle = BorderStyle.Fixed3D; trackBar = new TrackBar(); trackBar.Location = new Point(0, 0); trackBar.Size = new Size(this.Width, TRACKBAR_HEIGHT); trackBar.Minimum = 0; trackBar.Maximum = 359; trackBar.ValueChanged += new EventHandler(TrackBar_OnValueChanged); this.Controls.Add(trackBar); int swatchWidth = this.Width / UNIT; int swatchY = trackBar.Location.Y + trackBar.Height; for (int hue = 0; hue < 360; hue++) { Panel colorPanel = new Panel(); colorPanel.Location = new Point(hue * swatchWidth, swatchY); colorPanel.Size = new Size(swatchWidth, this.Height); colorPanel.BackColor = ConvertColors.ToColor(new HSV(hue, 1, 1)); colorPanel.Click += new EventHandler(Color_OnClick); this.Controls.Add(colorPanel); } if (startColor.HasValue) { Hue = (int)ConvertColors.ToHSV(startColor.Value).Hue; } }
public void HexadecimalFromColor_ColorLibrary() { foreach (ColorLibrary.Name name in ColorLibrary.Library.Keys) { //arrange TestColor testColor = ColorLibrary.Library[name]; //act string result = ConvertColors.ToHexadecimal(testColor.Color); //assert Assert.AreEqual(testColor.Hexadecimal, result); } }
private void Gradient_OnClick(object sender, EventArgs e) { Point clickPoint = this.PointToClient(new Point(MousePosition.X, MousePosition.Y)); Color color = graphicsBitmap.GetPixel(clickPoint.X, clickPoint.Y); HSV hsv = ConvertColors.ToHSV(color); saturation = (int)(100 * hsv.Saturation); _value = (int)(100 * hsv.Value); if (ColorChanged != null) { ColorChanged(this, new EventArgs()); } }
public void HSVFromColor_ColorLibrary() { foreach (ColorLibrary.Name name in ColorLibrary.Library.Keys) { //arrange TestColor testColor = ColorLibrary.Library[name]; //act HSV result = ConvertColors.ToHSV(testColor.Color); //assert Assert.AreEqual(testColor.HSV.Hue, result.Hue); Assert.AreEqual(testColor.HSV.Saturation, result.Saturation); Assert.AreEqual(testColor.HSV.Value, result.Value); } }
public void ColorFromHexadecimal_ColorLibrary() { foreach (ColorLibrary.Name name in ColorLibrary.Library.Keys) { //arrange TestColor testColor = ColorLibrary.Library[name]; //act Color result = ConvertColors.HexadecimalToColor(testColor.Hexadecimal); //assert Assert.AreEqual(testColor.Color.R, result.R); Assert.AreEqual(testColor.Color.G, result.G); Assert.AreEqual(testColor.Color.B, result.B); } }
public void TryParseRGB_255_255_25() { //arrange int red = 255; int green = 255; int blue = 25; string text = String.Format("{0},{1},{2}", red, green, blue); Color color = Color.Black; //act ConvertColors.TryParseRGB(text, out color); //assert Assert.AreEqual(red, color.R); Assert.AreEqual(green, color.G); Assert.AreEqual(blue, color.B); }
protected override void OnPaint(PaintEventArgs e) { graphicsBitmap = new Bitmap(this.Width, this.Height); using (Graphics gBitmap = Graphics.FromImage(graphicsBitmap)) { for (int saturation = 0; saturation <= 100; saturation++) { for (int value = 0; value <= 100; value++) { int reverseValue = 100 - value; Color color = ConvertColors.ToColor(new HSV(hue, saturation / 100f, reverseValue / 100f)); SolidBrush brush = new SolidBrush(color); gBitmap.FillRectangle(brush, new Rectangle(saturation * swatchWidth, value * swatchWidth, swatchWidth, swatchWidth)); } } } e.Graphics.DrawImage(graphicsBitmap, 0, 0); }
private void OnTextChanged(object sender, EventArgs e) { TextBox textBox = sender as TextBox; Color newColor = System.Drawing.Color.Black; bool success = false; switch (textBox.Name) { case NAME_HEXADECIMAL: if ((textBox.Text.Length == 6 && !textBox.Text.StartsWith("#")) || (textBox.Text.Length == 7 && textBox.Text.StartsWith("#"))) { success = ConvertColors.TryParseHexadecimal(textBox.Text, out newColor); } break; case NAME_RGB: if (textBox.Text.EndsWith(")")) { success = ConvertColors.TryParseRGB(textBox.Text, out newColor); } break; case NAME_HSV: if (textBox.Text.EndsWith(")")) { success = ConvertColors.TryParseHSV(textBox.Text, out newColor); } break; } if (success) { Color = newColor; if (ColorChanged != null) { ColorChanged(this, new ColorEventArgs(newColor)); } } else { textBox.BackColor = COLOR_ERROR; } }
/// <summary> /// Returns the palest (closest to white) color in the set. /// </summary> public static Color FindPalestColor(HashSet <ColorAtPoint> points) { if (ColorIsGreyscale(points.First().Color)) { return(Color.White); } Color color = Color.Black; HSV hsv = ConvertColors.ToHSV(color); foreach (ColorAtPoint p in points) { HSV pHSV = ConvertColors.ToHSV(p.Color); if (pHSV.Value > hsv.Value) { color = p.Color; hsv = pHSV; } } return(color); }
/// <summary> /// Converts a hued color to its nuetral grey equivalent, based on the pure form of the hue. /// </summary> public static Color ColorToGreyscale(Color color, Color pureColor) { if (ColorIsGreyscale(color)) { return(color); } if (color == pureColor) { return(Color.White); } HSV colorHSV = ConvertColors.ToHSV(color); HSV pureColorHSV = ConvertColors.ToHSV(pureColor); Range fullRange = new Range(MAX_VALUE_AS_BLACK, 1); Range newRange = new Range(MAX_VALUE_AS_BLACK, pureColorHSV.Value); float adjustedValue = (float)Range.ConvertValue(newRange, fullRange, colorHSV.Value); HSV adjustedHSV = new HSV(0, 0, adjustedValue); Color adjustedColor = ConvertColors.ToColor(adjustedHSV); return(adjustedColor); }
public SaturationValuePanel(Color?startColor = null) { int totalColorHeight = UNIT * 3; this.Height = TRACKBAR_HEIGHT + totalColorHeight; this.Width = TRACKBAR_HEIGHT + totalColorHeight; this.BorderStyle = BorderStyle.Fixed3D; saturationTrackBar = new TrackBar(); saturationTrackBar.Location = new Point(TRACKBAR_HEIGHT, 0); saturationTrackBar.Size = new Size(totalColorHeight, TRACKBAR_HEIGHT); saturationTrackBar.Minimum = 0; saturationTrackBar.Maximum = 100; saturationTrackBar.ValueChanged += new EventHandler(Saturation_OnValueChanged); this.Controls.Add(saturationTrackBar); valueTrackBar = new TrackBar(); valueTrackBar.Location = new Point(0, TRACKBAR_HEIGHT); valueTrackBar.Size = new Size(TRACKBAR_HEIGHT, totalColorHeight); valueTrackBar.Minimum = 0; valueTrackBar.Maximum = 100; valueTrackBar.Orientation = Orientation.Vertical; valueTrackBar.ValueChanged += new EventHandler(Value_OnValueChanged); this.Controls.Add(valueTrackBar); gradientPanel = new SaturationValueGradientPanel(totalColorHeight); gradientPanel.Location = new Point(TRACKBAR_HEIGHT, TRACKBAR_HEIGHT); gradientPanel.ColorChanged += new EventHandler(Gradient_OnColorChange); this.Controls.Add(gradientPanel); if (startColor.HasValue) { HSV hsv = ConvertColors.ToHSV(startColor.Value); Hue = (int)hsv.Hue; Saturation = (int)(hsv.Saturation * 100); Value = (int)(hsv.Value * 100); } }
private void DisplayData() { if (color == null) { hexadecimalData.Text = ""; rgbData.Text = ""; hsvData.Text = ""; return; } SetTextWithoutEvent(hexadecimalData, ConvertColors.ToHexadecimal(color.Value)); SetTextWithoutEvent(rgbData, String.Format("({0}, {1}, {2})", color.Value.R, color.Value.G, color.Value.B)); HSV hsv = ConvertColors.ToHSV(color.Value); SetTextWithoutEvent(hsvData, String.Format("({0:0.####}, {1:0.####}, {2:0.####})", hsv.Hue, hsv.Saturation, hsv.Value)); if (!hexadecimalData.ReadOnly) { hexadecimalData.BackColor = COLOR_NO_ERROR; rgbData.BackColor = COLOR_NO_ERROR; hsvData.BackColor = COLOR_NO_ERROR; } }
public void GenerateGradiantSamples() { List <Color> colors = new List <Color>() { //100% saturation, 100% value ConvertColors.HSVToColor(0, 1, 1), //red ConvertColors.HSVToColor(30, 1, 1), //orange ConvertColors.HSVToColor(60, 1, 1), //yellow ConvertColors.HSVToColor(90, 1, 1), //green ConvertColors.HSVToColor(120, 1, 1), //green also ConvertColors.HSVToColor(150, 1, 1), //aqua ConvertColors.HSVToColor(180, 1, 1), //cyan ConvertColors.HSVToColor(210, 1, 1), //blue ConvertColors.HSVToColor(240, 1, 1), //blue darker ConvertColors.HSVToColor(270, 1, 1), //purple ConvertColors.HSVToColor(300, 1, 1), //magenta ConvertColors.HSVToColor(330, 1, 1), //fushia //100% saturation, 50% value ConvertColors.HSVToColor(0, 1, 0.5f), //red ConvertColors.HSVToColor(30, 1, 0.5f), //orange ConvertColors.HSVToColor(60, 1, 0.5f), //yellow ConvertColors.HSVToColor(90, 1, 0.5f), //green ConvertColors.HSVToColor(120, 1, 0.5f), //green also ConvertColors.HSVToColor(150, 1, 0.5f), //aqua ConvertColors.HSVToColor(180, 1, 0.5f), //cyan ConvertColors.HSVToColor(210, 1, 0.5f), //blue ConvertColors.HSVToColor(240, 1, 0.5f), //blue darker ConvertColors.HSVToColor(270, 1, 0.5f), //purple ConvertColors.HSVToColor(300, 1, 0.5f), //magenta ConvertColors.HSVToColor(330, 1, 0.5f), //fushia //100% saturation, 25% value ConvertColors.HSVToColor(0, 1, 0.25f), //red ConvertColors.HSVToColor(30, 1, 0.25f), //orange ConvertColors.HSVToColor(60, 1, 0.25f), //yellow ConvertColors.HSVToColor(90, 1, 0.25f), //green ConvertColors.HSVToColor(120, 1, 0.25f), //green also ConvertColors.HSVToColor(150, 1, 0.25f), //aqua ConvertColors.HSVToColor(180, 1, 0.25f), //cyan ConvertColors.HSVToColor(210, 1, 0.25f), //blue ConvertColors.HSVToColor(240, 1, 0.25f), //blue darker ConvertColors.HSVToColor(270, 1, 0.25f), //purple ConvertColors.HSVToColor(300, 1, 0.25f), //magenta ConvertColors.HSVToColor(330, 1, 0.25f), //fushia //50% saturation, 100% value ConvertColors.HSVToColor(0, 0.5f, 1), //red ConvertColors.HSVToColor(30, 0.5f, 1), //orange ConvertColors.HSVToColor(60, 0.5f, 1), //yellow ConvertColors.HSVToColor(90, 0.5f, 1), //green ConvertColors.HSVToColor(120, 0.5f, 1), //green also ConvertColors.HSVToColor(150, 0.5f, 1), //aqua ConvertColors.HSVToColor(180, 0.5f, 1), //cyan ConvertColors.HSVToColor(210, 0.5f, 1), //blue ConvertColors.HSVToColor(240, 0.5f, 1), //blue darker ConvertColors.HSVToColor(270, 0.5f, 1), //purple ConvertColors.HSVToColor(300, 0.5f, 1), //magenta ConvertColors.HSVToColor(330, 0.5f, 1), //fushia //50% saturation, 50% value ConvertColors.HSVToColor(0, 0.5f, 0.5f), //red ConvertColors.HSVToColor(30, 0.5f, 0.5f), //orange ConvertColors.HSVToColor(60, 0.5f, 0.5f), //yellow ConvertColors.HSVToColor(90, 0.5f, 0.5f), //green ConvertColors.HSVToColor(120, 0.5f, 0.5f), //green also ConvertColors.HSVToColor(150, 0.5f, 0.5f), //aqua ConvertColors.HSVToColor(180, 0.5f, 0.5f), //cyan ConvertColors.HSVToColor(210, 0.5f, 0.5f), //blue ConvertColors.HSVToColor(240, 0.5f, 0.5f), //blue darker ConvertColors.HSVToColor(270, 0.5f, 0.5f), //purple ConvertColors.HSVToColor(300, 0.5f, 0.5f), //magenta ConvertColors.HSVToColor(330, 0.5f, 0.5f), //fushia //50% saturation, 50% value ConvertColors.HSVToColor(0, 0.5f, 0.25f), //red ConvertColors.HSVToColor(30, 0.5f, 0.25f), //orange ConvertColors.HSVToColor(60, 0.5f, 0.25f), //yellow ConvertColors.HSVToColor(90, 0.5f, 0.25f), //green ConvertColors.HSVToColor(120, 0.5f, 0.25f), //green also ConvertColors.HSVToColor(150, 0.5f, 0.25f), //aqua ConvertColors.HSVToColor(180, 0.5f, 0.25f), //cyan ConvertColors.HSVToColor(210, 0.5f, 0.25f), //blue ConvertColors.HSVToColor(240, 0.5f, 0.25f), //blue darker ConvertColors.HSVToColor(270, 0.5f, 0.25f), //purple ConvertColors.HSVToColor(300, 0.5f, 0.25f), //magenta ConvertColors.HSVToColor(330, 0.5f, 0.25f), //fushia //25% saturation, 100% value ConvertColors.HSVToColor(0, 0.25f, 1), //red ConvertColors.HSVToColor(30, 0.25f, 1), //orange ConvertColors.HSVToColor(60, 0.25f, 1), //yellow ConvertColors.HSVToColor(90, 0.25f, 1), //green ConvertColors.HSVToColor(120, 0.25f, 1), //green also ConvertColors.HSVToColor(150, 0.25f, 1), //aqua ConvertColors.HSVToColor(180, 0.25f, 1), //cyan ConvertColors.HSVToColor(210, 0.25f, 1), //blue ConvertColors.HSVToColor(240, 0.25f, 1), //blue darker ConvertColors.HSVToColor(270, 0.25f, 1), //purple ConvertColors.HSVToColor(300, 0.25f, 1), //magenta ConvertColors.HSVToColor(330, 0.25f, 1), //fushia //25% saturation, 75% value ConvertColors.HSVToColor(0, 0.25f, 0.75f), //red ConvertColors.HSVToColor(30, 0.25f, 0.75f), //orange ConvertColors.HSVToColor(60, 0.25f, 0.75f), //yellow ConvertColors.HSVToColor(90, 0.25f, 0.75f), //green ConvertColors.HSVToColor(120, 0.25f, 0.75f), //green also ConvertColors.HSVToColor(150, 0.25f, 0.75f), //aqua ConvertColors.HSVToColor(180, 0.25f, 0.75f), //cyan ConvertColors.HSVToColor(210, 0.25f, 0.75f), //blue ConvertColors.HSVToColor(240, 0.25f, 0.75f), //blue darker ConvertColors.HSVToColor(270, 0.25f, 0.75f), //purple ConvertColors.HSVToColor(300, 0.25f, 0.75f), //magenta ConvertColors.HSVToColor(330, 0.25f, 0.75f), //fushia //25% saturation, 50% value ConvertColors.HSVToColor(0, 0.25f, 0.5f), //red ConvertColors.HSVToColor(30, 0.25f, 0.5f), //orange ConvertColors.HSVToColor(60, 0.25f, 0.5f), //yellow ConvertColors.HSVToColor(90, 0.25f, 0.5f), //green ConvertColors.HSVToColor(120, 0.25f, 0.5f), //green also ConvertColors.HSVToColor(150, 0.25f, 0.5f), //aqua ConvertColors.HSVToColor(180, 0.25f, 0.5f), //cyan ConvertColors.HSVToColor(210, 0.25f, 0.5f), //blue ConvertColors.HSVToColor(240, 0.25f, 0.5f), //blue darker ConvertColors.HSVToColor(270, 0.25f, 0.5f), //purple ConvertColors.HSVToColor(300, 0.25f, 0.5f), //magenta ConvertColors.HSVToColor(330, 0.25f, 0.5f), //fushia //25% saturation, 25% value ConvertColors.HSVToColor(0, 0.25f, 0.25f), //red ConvertColors.HSVToColor(30, 0.25f, 0.25f), //orange ConvertColors.HSVToColor(60, 0.25f, 0.25f), //yellow ConvertColors.HSVToColor(90, 0.25f, 0.25f), //green ConvertColors.HSVToColor(120, 0.25f, 0.25f), //green also ConvertColors.HSVToColor(150, 0.25f, 0.25f), //aqua ConvertColors.HSVToColor(180, 0.25f, 0.25f), //cyan ConvertColors.HSVToColor(210, 0.25f, 0.25f), //blue ConvertColors.HSVToColor(240, 0.25f, 0.25f), //blue darker ConvertColors.HSVToColor(270, 0.25f, 0.25f), //purple ConvertColors.HSVToColor(300, 0.25f, 0.25f), //magenta ConvertColors.HSVToColor(330, 0.25f, 0.25f), //fushia }; int width = 50; foreach (Color color in colors) { Bitmap revertBitmap = GetRevertedGradient(width, color); Bitmap colorBitmap = GetColoredGradient(width, color); Bitmap grayBitmap = GetGrayscaleGradient(width); Bitmap bitmap = new Bitmap(width * 3, revertBitmap.Height); using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.DrawImage(revertBitmap, new Point(0, 0)); graphics.DrawImage(colorBitmap, new Point(width, 0)); graphics.DrawImage(grayBitmap, new Point(width * 2, 0)); } bitmap.Save(String.Format("GradientSamples/sample_{0:000}_{1:000}_{2:000}.png", color.R, color.G, color.B)); } }
private void UpdateSelectedColor() { Color = ConvertColors.ToColor(new HSV(huePanel.Hue, saturationValuePanel.Saturation / 100f, saturationValuePanel.Value / 100f)); selectedColorPanel.BackColor = Color; colorDataPanel.Color = Color; }
/// <summary> /// Converts translucent colors to a greyscale equivalent. /// </summary> private static Color ConvertPartiallyClearToGrey(Color oldColor) { //25% solid => 75% gray return(ConvertColors.HSVToColor(0, 0, (255 - oldColor.A) / 255f)); }