public static GradientBrush Convert(System.Windows.Media.Color color) { var scrgb = color.ToScRGBColor(); var xyz = KnownColorSpaces.scRGB.ToXYZColor(scrgb); var lab = KnownColorSpaces.Lab.FromXYZColor(xyz) as LabColor; var l_base = lab.L; var gradientStops = new GradientStopCollection(); var _lab = new LabColor(0xff, l_base * 1.07, lab.a, lab.b); var _c = _lab.ToWindowsMediaColor(); gradientStops.Add(new GradientStop(_c, 0.5)); _lab = new LabColor(0xff, l_base * .93, lab.a, lab.b); _c = _lab.ToWindowsMediaColor(); gradientStops.Add(new GradientStop(_c, 1)); var result = new LinearGradientBrush(gradientStops, 90); result.Freeze(); return result; }
/// <summary> /// Returns new color based on existing color with modified lightness component. /// </summary> /// <param name="color"></param> /// <param name="lightnessMultiplier">0.5 to reduce lightness by 50%, 1.5 to increase lightness by 50%</param> /// <returns></returns> public static System.Windows.Media.Color ChangeLighthness(this System.Windows.Media.Color color, double lightnessMultiplier) { var scRGB = color.ToScRGBColor(); var xyz = KnownColorSpaces.scRGB.ToXYZColor(scRGB); var lab = (LabColor) KnownColorSpaces.Lab.FromXYZColor(xyz); var newColor = new LabColor(lab.Alpha, lab.L * lightnessMultiplier, lab.a, lab.b); return newColor.ToWindowsMediaColor(); }