/// <summary> /// Gets a linear gradient definition. /// </summary> public static RadialGradientColor GetRadialGradientColor(StructureDescriptor descriptor) { var radialGradientColor = new RadialGradientColor(); radialGradientColor.GradientStops = GetGradientColor(descriptor, radialGradientColor); return(radialGradientColor); }
/// <summary> /// Get our intermediate radial gradient color definition from the given psd color definition /// </summary> private (GraphicRadialGradientBrush, GraphicColorPrecision) GetRadialGradientBrush(RadialGradientColor radialGradientColor, double aspectRatio, bool returnDarkDefaultColor) { var gradient = new GraphicRadialGradientBrush(); gradient.StartPoint = new Point(0.5, 0.5); gradient.EndPoint = new Point(0.5, 0.5); var alpha = Math.Abs(radialGradientColor.Angle) % 90; double angleRad = alpha * Math.PI / 180.0; var beta = Math.Atan(aspectRatio); if (angleRad < beta) { var radius = 0.5 / Math.Cos(angleRad); gradient.RadiusX = radius; gradient.RadiusY = radius / aspectRatio; } else { var radius = 0.5 / Math.Cos(Math.PI / 2 - angleRad); gradient.RadiusY = radius; gradient.RadiusX = radius * aspectRatio; } gradient.GradientStops = new List <GraphicGradientStop>(); GraphicColorPrecision precision; var scale = radialGradientColor.Scale / 100; foreach (var stop in radialGradientColor.GradientStops) { var gs = new GraphicGradientStop(); gradient.GradientStops.Add(gs); (gs.Color, precision) = GetColor(stop.Color, returnDarkDefaultColor); gs.Position = stop.Position / radialGradientColor.MaxPosition; if (radialGradientColor.IsReverse) { gs.Position = 1 - gs.Position; } if (radialGradientColor.Scale != 100) { gs.Position *= scale; } } return(gradient, GraphicColorPrecision.Estimated); }