public ColorScale(ColorScale source) { if (source == null) { throw new ArgumentNullException("source"); } _stops = new ColorScaleStop[source._stops.Length]; for (int i = 0; i < _stops.Length; i++) { _stops[i] = new ColorScaleStop(source._stops[i]); } }
public ColorScale GetPaletteScale() { var baseColorRGB = _baseColor.ActiveColor; var baseColorHSL = ColorUtils.RGBToHSL(baseColorRGB); var baseColorNormalized = new NormalizedRGB(baseColorRGB); var baseScale = new ColorScale(new Color[] { _scaleColorLight, baseColorRGB, _scaleColorDark, }); var trimmedScale = baseScale.Trim(_clipLight, 1.0 - _clipDark); var trimmedLight = new NormalizedRGB(trimmedScale.GetColor(0, _interpolationMode)); var trimmedDark = new NormalizedRGB(trimmedScale.GetColor(1, _interpolationMode)); var adjustedLight = trimmedLight; var adjustedDark = trimmedDark; if (baseColorHSL.S >= _saturationAdjustmentCutoff) { adjustedLight = ColorBlending.SaturateViaLCH(adjustedLight, _saturationLight); adjustedDark = ColorBlending.SaturateViaLCH(adjustedDark, _saturationDark); } if (_multiplyLight != 0) { var multiply = ColorBlending.Blend(baseColorNormalized, adjustedLight, ColorBlendMode.Multiply); adjustedLight = ColorUtils.InterpolateColor(adjustedLight, multiply, _multiplyLight, _interpolationMode); } if (_multiplyDark != 0) { var multiply = ColorBlending.Blend(baseColorNormalized, adjustedDark, ColorBlendMode.Multiply); adjustedDark = ColorUtils.InterpolateColor(adjustedDark, multiply, _multiplyDark, _interpolationMode); } if (_overlayLight != 0) { var overlay = ColorBlending.Blend(baseColorNormalized, adjustedLight, ColorBlendMode.Overlay); adjustedLight = ColorUtils.InterpolateColor(adjustedLight, overlay, _overlayLight, _interpolationMode); } if (_overlayDark != 0) { var overlay = ColorBlending.Blend(baseColorNormalized, adjustedDark, ColorBlendMode.Overlay); adjustedDark = ColorUtils.InterpolateColor(adjustedDark, overlay, _overlayDark, _interpolationMode); } var finalScale = new ColorScale(new Color[] { adjustedLight.Denormalize(), baseColorRGB, adjustedDark.Denormalize() }); return(finalScale); }