コード例 #1
0
ファイル: ColorReader.cs プロジェクト: Egaros/ShapeConverter
        /// <summary>
        /// Gets a linear gradient definition.
        /// </summary>
        public static RadialGradientColor GetRadialGradientColor(StructureDescriptor descriptor)
        {
            var radialGradientColor = new RadialGradientColor();

            radialGradientColor.GradientStops = GetGradientColor(descriptor, radialGradientColor);

            return(radialGradientColor);
        }
コード例 #2
0
        /// <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);
        }