private void CalcCoordsAndUpdate(ColorHandler.HSV HSV) { // Convert color to real-world coordinates and then calculate // the various points. HSV.Hue represents the degrees (0 to 360), // HSV.Saturation represents the radius. // This procedure doesn't draw anything--it simply // updates class-level variables. The UpdateDisplay // procedure uses these values to update the screen. // Given the angle (HSV.Hue), and distance from // the center (HSV.Saturation), and the center, // calculate the point corresponding to // the selected color, on the color wheel. colorPoint = GetPoint((double)HSV.Hue / 255 * 360, (double)HSV.Saturation / 255 * radius, centerPoint); // Given the brightness (HSV.value), calculate the // point corresponding to the brightness indicator. brightnessPoint = CalcBrightnessPoint(HSV.Value); // Store information about the selected color. brightness = HSV.Value; selectedColor = ColorHandler.HSVtoColor(HSV); argb = ColorHandler.HSVtoRGB(HSV); // The full color is the same as HSV, except that the // brightness is set to full (255). This is the top-most // color in the brightness gradient. fullColor = ColorHandler.HSVtoColor(HSV.Alpha, HSV.Hue, HSV.Saturation, 255); }
public void Draw(Graphics g, ColorHandler.ARGB argb) { // Given RGB values, calculate HSV and then update the screen. this.g = g; HSV = ColorHandler.RGBtoHSV(argb); CalcCoordsAndUpdate(HSV); UpdateDisplay(); }
public void Draw(Graphics g, ColorHandler.Argb argb) { // Given RGB values, calculate HSV and then update the screen. _g = g; _hsv = ColorHandler.RgbToHsv(argb); CalcCoordsAndUpdate(_hsv); UpdateDisplay(); }
private Color[] GetColors() { // Create an array of COLOR_COUNT // colors, looping through all the // hues between 0 and 255, broken // into COLOR_COUNT intervals. HSV is // particularly well-suited for this, // because the only value that changes // as you create colors is the Hue. var Colors = new Color[COLOR_COUNT]; for (int i = 0; i <= COLOR_COUNT - 1; i++) { Colors[i] = ColorHandler.HSVtoColor(255, (int)((double)(i * 255) / COLOR_COUNT), 255, 255); } return(Colors); }
/// <summary> /// The set hsv. /// </summary> /// <param name="HSV"> /// The hsv. /// </param> private void SetHSV(ColorHandler.HSV HSV) { // Update the HSV values on the form. RefreshValue(this.tbHue, HSV.Hue); RefreshValue(this.tbSaturation, HSV.Saturation); RefreshValue(this.tbValue, HSV.Value); RefreshValue(this.tbAlpha, HSV.Alpha); this.SetHSVLabels(HSV); }
/// <summary> /// The set rgb. /// </summary> /// <param name="argb"> /// The argb. /// </param> private void SetRGB(ColorHandler.ARGB argb) { // Update the RGB values on the form. RefreshValue(this.tbRed, argb.Red); RefreshValue(this.tbBlue, argb.Blue); RefreshValue(this.tbGreen, argb.Green); RefreshValue(this.tbAlpha, argb.Alpha); this.SetRGBLabels(argb); }
/// <summary> /// The set hsv labels. /// </summary> /// <param name="HSV"> /// The hsv. /// </param> private void SetHSVLabels(ColorHandler.HSV HSV) { RefreshText(this.lblHue, HSV.Hue); RefreshText(this.lblSaturation, HSV.Saturation); RefreshText(this.lblValue, HSV.Value); RefreshText(this.lblAlpha2, HSV.Alpha); }
/// <summary> /// The set rgb labels. /// </summary> /// <param name="argb"> /// The argb. /// </param> private void SetRGBLabels(ColorHandler.ARGB argb) { RefreshText(this.lblRed, argb.Red); RefreshText(this.lblBlue, argb.Blue); RefreshText(this.lblGreen, argb.Green); RefreshText(this.lblAlpha2, argb.Alpha); if (this._showAlpha) { this.tbHexCode.Text = string.Format("{0:X2}{1:X2}{2:X2}{3:X2}", argb.Alpha, argb.Red, argb.Green, argb.Blue); } else { this.tbHexCode.Text = string.Format("{0:X2}{1:X2}{2:X2}", argb.Red, argb.Green, argb.Blue); } }
public void Draw(Graphics g, Point mousePoint) { try { // You've moved the mouse. // Now update the screen to match. // Keep track of the previous color pointer point, // so you can put the mouse there in case the // user has clicked outside the circle. Point newColorPoint = colorPoint; Point newBrightnessPoint = brightnessPoint; // Store this away for later use. this.g = g; if (currentState == MouseState.MouseUp) { if (!mousePoint.IsEmpty) { if (colorRegion.IsVisible(mousePoint)) { // Is the mouse point within the color circle? // If so, you just clicked on the color wheel. currentState = MouseState.ClickOnColor; } else if (brightnessRegion.IsVisible(mousePoint)) { // Is the mouse point within the brightness area? // You clicked on the brightness area. currentState = MouseState.ClickOnBrightness; } else { // Clicked outside the color and the brightness // regions. In that case, just put the // pointers back where they were. currentState = MouseState.ClickOutsideRegion; } } } switch (currentState) { case MouseState.ClickOnBrightness: case MouseState.DragInBrightness: // Calculate new color information // based on the brightness, which may have changed. Point newPoint = mousePoint; if (newPoint.Y < brightnessMin) { newPoint.Y = brightnessMin; } else if (newPoint.Y > brightnessMax) { newPoint.Y = brightnessMax; } newBrightnessPoint = new Point(brightnessX, newPoint.Y); brightness = (int)((brightnessMax - newPoint.Y) * brightnessScaling); HSV.Value = brightness; brightness = byte.MaxValue; argb = ColorHandler.HSVtoRGB(HSV); brightness = (argb.Red + argb.Green + argb.Blue) / 3; break; case MouseState.ClickOnColor: case MouseState.DragInColor: // Calculate new color information // based on selected color, which may have changed. newColorPoint = mousePoint; // Calculate x and y distance from the center, // and then calculate the angle corresponding to the // new location. Point delta = new Point( mousePoint.X - centerPoint.X, mousePoint.Y - centerPoint.Y); int degrees = CalcDegrees(delta); // Calculate distance from the center to the new point // as a fraction of the radius. Use your old friend, // the Pythagorean theorem, to calculate this value. double distance = Math.Sqrt(delta.X * delta.X + delta.Y * delta.Y) / radius; if (currentState == MouseState.DragInColor) { if (distance > 1) { // Mouse is down, and outside the circle, but you // were previously dragging in the color circle. // What to do? // In that case, move the point to the edge of the // circle at the correct angle. distance = 1; newColorPoint = GetPoint(degrees, radius, centerPoint); } } // Calculate the new HSV and RGB values. HSV.Hue = (degrees * 255 / 360); HSV.Saturation = (int)(distance * 255); brightness = byte.MaxValue; HSV.Value = brightness; argb = ColorHandler.HSVtoRGB(HSV); if (argb.Red < 0 || argb.Red > byte.MaxValue || argb.Green < 0 || argb.Green > byte.MaxValue || argb.Blue < 0 || argb.Blue > byte.MaxValue) { UpdateDisplay(); return; } brightness = (argb.Red + argb.Green + argb.Blue) / 3; fullColor = ColorHandler.HSVtoColor(HSV.Alpha, HSV.Hue, HSV.Saturation, 255); break; } selectedColor = ColorHandler.HSVtoColor(HSV); // Raise an event back to the parent form, // so the form can update any UI it's using // to display selected color values. OnColorChanged(argb, HSV); // On the way out, set the new state. switch (currentState) { case MouseState.ClickOnBrightness: currentState = MouseState.DragInBrightness; break; case MouseState.ClickOnColor: currentState = MouseState.DragInColor; break; case MouseState.ClickOutsideRegion: currentState = MouseState.DragOutsideRegion; break; } // Store away the current points for next time. colorPoint = newColorPoint; brightnessPoint = newBrightnessPoint; // Draw the gradients and points. UpdateDisplay(); } catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.Message); } }
/// <summary> /// Initializes a new instance of the <see cref="ColorChangedEventArgs"/> class. /// </summary> /// <param name="argb"> /// The argb. /// </param> /// <param name="hsv"> /// The hsv. /// </param> public ColorChangedEventArgs(ColorHandler.ARGB argb, ColorHandler.HSV hsv) { this.ARGB = argb; this.HSV = hsv; }
protected void OnColorChanged(ColorHandler.ARGB argb, ColorHandler.HSV HSV) { var e = new ColorChangedEventArgs(argb, HSV); ColorChanged(this, e); }
public void Draw(Graphics g, ColorHandler.ARGB argb) { // Given RGB values, calculate HSV and then update the screen. this.g = g; hsv = ColorHandler.RGBtoHSV(argb); CalcCoordsAndUpdate(hsv); UpdateDisplay(); }
public void Draw(Graphics g, ColorHandler.HSV HSV) { // Given HSV values, update the screen. this.g = g; this.hsv = HSV; CalcCoordsAndUpdate(this.hsv); UpdateDisplay(); }
public ColorChangedEventArgs(ColorHandler.ARGB argb, ColorHandler.HSV HSV) { ARGB = argb; this.HSV = HSV; }