/// <summary> /// Get a color between 2 color (ie gradiant step) /// </summary> /// <param name="s">Start Color </param> /// <param name="e">End Color</param> /// <param name="clamp">Intyerpolation factor : clamp [0,1]</param> /// <param name="useHSB">Use USB convertion to compute interpolation</param> /// <returns></returns> public static Color GetStepColor(this Color s, Color e, double clamp, bool useHSB) { double t = Math.Min(Math.Max(clamp, 0), 1); if (useHSB) { ColorHSB sHSB = ColorHSB.FromRGB(s); ColorHSB eHSB = ColorHSB.FromRGB(e); double dH = sHSB.Hue - eHSB.Hue; double dS = sHSB.Saturation - eHSB.Saturation; double dB = sHSB.Brightness - eHSB.Brightness; ColorHSB mHSB = new ColorHSB(); mHSB.Hue = sHSB.Hue - t * dH; mHSB.Saturation = sHSB.Saturation - t * dS; mHSB.Brightness = sHSB.Brightness - t * dB; Color ret = mHSB.ToColor(); return(ret); } else { double dR = s.R - e.R; double dG = s.G - e.G; double dB = s.B - e.B; double r = s.R - t * dR; double g = s.G - t * dG; double b = s.B - t * dB; Color ret = Color.FromArgb((int)r, (int)g, (int)b); return(ret); } }
/// <summary> /// Modifies an existing Hue level /// </summary> /// <remarks> /// To reduce Hue use a number smaller than 1. To increase Hue use a number larger tnan 1 /// </remarks> /// <param name="c">The original colour</param> /// <param name="Hue">The Hue delta</param> /// <returns>An adjusted colour</returns> public static Color ModifyHue(this Color c, double Hue) { ColorHSB hsb = ColorHSB.FromRGB(c); hsb.Hue *= Hue; return(hsb.ToColor()); }
/// <summary> /// Modifies an existing Saturation level /// </summary> /// <remarks> /// To reduce Saturation use a number smaller than 1. To increase Saturation use a number larger tnan 1 /// </remarks> /// <param name="c">The original colour</param> /// <param name="Saturation">The saturation delta</param> /// <returns>An adjusted colour</returns> public static Color ModifySaturation(this Color c, double Saturation) { ColorHSB hsb = ColorHSB.FromRGB(c); hsb.Saturation *= Saturation; return(hsb.ToColor()); }
/// <summary> /// Modifies an existing brightness level /// </summary> /// <param name="c">The original colour</param> /// <param name="brightness">The luminance delta</param> /// <returns>An adjusted colour</returns> public static Color ModifyBrightness(this Color c, double brightness) { ColorHSB hsb = ColorHSB.FromRGB(c); hsb.Brightness *= (1 + brightness); return(hsb.ToColor()); }
/// <summary> /// Sets the absolute brightness of a colour /// </summary> /// <param name="c">Original colour</param> /// <param name="brightness">The luminance level to impose</param> /// <returns>an adjusted colour</returns> public static Color SetBrightness(this Color c, double brightness) { ColorHSB hsb = ColorHSB.FromRGB(c); hsb.Brightness = brightness; return(hsb.ToColor()); }
/// <summary> /// Converts RGB to ColorHSB /// </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 ColorHSB value</returns> internal static ColorHSB FromRGB(Color c) { ColorHSB hsb = new ColorHSB(); hsb.Hue = c.GetHue() / 360.0; // we store hue as 0-1 as opposed to 0-360 hsb.Brightness = c.GetBrightness(); hsb.Saturation = c.GetSaturation(); return(hsb); }