public static HsvColor RgbColorToHsvColor(RgbColor rgbColor) { double rgbMax; double rgbMin; var hue = GetHue(rgbColor, out rgbMax, out rgbMin); var value = rgbMax; var saturation = Equals(rgbMax, 0.0) ? 0.0 : 1.0 - rgbMin / rgbMax; return(new HsvColor(rgbColor.A, hue, saturation, value)); }
public static HslColor RgbColorToHslColor(RgbColor rgbColor) { double rgbMax; double rgbMin; var hue = GetHue(rgbColor, out rgbMax, out rgbMin); var lightness = 0.5 * (rgbMax + rgbMin); var d = rgbMax - rgbMin; var saturation = lightness > 0.5 ? d / (2 - rgbMax - rgbMin) : d / (rgbMax + rgbMin); return(new HslColor(rgbColor.A, hue, saturation.IsNaN() ? 0 : saturation, lightness)); }
public static RgbColor HsvColorToRgbColor(HsvColor hsvColor) { var a = hsvColor.Alpha; var h = hsvColor.Hue; var s = hsvColor.Saturation; var v = hsvColor.Value; var hn = Math.Floor(h / 60.0); var hi = (int)hn % 6; var f = (h / 60.0) - hn; var p = v * (1.0 - s); var q = v * (1.0 - (f * s)); var t = v * (1.0 - ((1.0 - f) * s)); switch (hi) { case 0: return(RgbColor.FromRgb(a, v, t, p)); case 1: return(RgbColor.FromRgb(a, q, v, p)); case 2: return(RgbColor.FromRgb(a, p, v, t)); case 3: return(RgbColor.FromRgb(a, p, q, v)); case 4: return(RgbColor.FromRgb(a, t, p, v)); case 5: return(RgbColor.FromRgb(a, v, p, q)); default: return(RgbColor.FromRgb(a, 0.0, 0.0, 0.0)); } }
private static double GetHue(RgbColor rgbColor, out double rgbMax, out double rgbMin) { rgbMax = MaxRgb(rgbColor); rgbMin = MinRgb(rgbColor); if (Equals(rgbColor.R, rgbColor.G) && Equals(rgbColor.G, rgbColor.B)) { return(0.0); } double hue; var delta = rgbMax - rgbMin; if (Equals(rgbColor.R, rgbMax)) { hue = (rgbColor.G - rgbColor.B) / delta; } else if (Equals(rgbColor.G, rgbMax)) { hue = 2 + (rgbColor.B - rgbColor.R) / delta; } else { hue = 4 + (rgbColor.R - rgbColor.G) / delta; } hue *= 60; if (hue < 0.0) { hue += 360.0; } return(hue); }
public static RgbColor Desaturate(RgbColor rgb, double amount, ColorFunctionUnits units) { return(Desaturate(rgb.ToHslColor(), amount, units).ToRgbColor()); }
public static RgbColor Tint(RgbColor color, double amount, ColorFunctionUnits units) { return(Mix(RgbWhite, color, GetRelativeUnit(amount, units))); }
public static RgbColor Shade(RgbColor color, double amount, ColorFunctionUnits units) { return(Mix(RgbBlack, color, GetRelativeUnit(amount, units))); }
public static RgbColor Mix(RgbColor color1, RgbColor color2, double weight = 0.5) { return(RgbColor.Mix(color1, color2, weight)); }
public static RgbColor Lighten(RgbColor rgb, double amount, ColorFunctionUnits units) { return(Lighten(rgb.ToHslColor(), amount, units).ToRgbColor()); }
public static RgbColor Greyscale(RgbColor color) { return(Desaturate(color, 100.0, ColorFunctionUnits.Percentage)); }
public static RgbColor FadeOut(RgbColor rgb, double amount, ColorFunctionUnits units) { rgb.A = ChannelOperation(FunctionKind.Decrease, rgb.A, amount, units); return(rgb); }
public static sRgbColor RgbTosRgb(RgbColor rgbColor) { return(new sRgbColor((byte)(rgbColor.A * byte.MaxValue + 0.5), ScRgbTosRgb(rgbColor.R), ScRgbTosRgb(rgbColor.G), ScRgbTosRgb(rgbColor.B))); }
private static double MinRgb(RgbColor rgbColor) { return(Math.Min(rgbColor.R, Math.Min(rgbColor.G, rgbColor.B))); }