Thursday, March 5, 2015

Break Gradient Color into Pieces

       void GetGradiencePieces()
        {
            
            var lgbHigh = new LinearGradientBrush(Colors.Red, Colors.White, 90.0);
            var lgbLow = new LinearGradientBrush(Colors.Orange, Colors.White, 90.0);
            Color clr;
            for (int i = 1; i < 21; i++)
            {
                if (i > 10 && i < 30)
                {
                    float f = (i - 10)/20.0f;
                     clr = GetColorSampleFromLinearGradientBrush(lgbHigh, f);
                }
            }

        }

        Color GetColorSampleFromLinearGradientBrush(LinearGradientBrush lgb, float y)
        {
            double max = lgb.GradientStops.Max(n => n.Offset);

            double min = lgb.GradientStops.Min(n => n.Offset);


            //Find gradient stops that surround the input value
            GradientStop gs0 = lgb.GradientStops.OrderBy(n => n.Offset).Last();
            GradientStop gs1 = lgb.GradientStops.OrderBy(n => n.Offset).First();
            Color cx = new Color();
            if (lgb.ColorInterpolationMode == ColorInterpolationMode.ScRgbLinearInterpolation)
            {
                float aVal = (gs1.Color.ScA - gs0.Color.ScA) * y + gs0.Color.ScA;
                float rVal = (gs1.Color.ScR - gs0.Color.ScR) * y + gs0.Color.ScR;
                float gVal = (gs1.Color.ScG - gs0.Color.ScG) * y + gs0.Color.ScG;
                float bVal = (gs1.Color.ScB - gs0.Color.ScB) * y + gs0.Color.ScB;
                cx = Color.FromScRgb(aVal, rVal, gVal, bVal);
            }
            else
            {
                byte aVal = (byte)((gs1.Color.A - gs0.Color.A) * y + gs0.Color.A);
                byte rVal = (byte)((gs1.Color.R - gs0.Color.R) * y + gs0.Color.R);
                byte gVal = (byte)((gs1.Color.G - gs0.Color.G) * y + gs0.Color.G);
                byte bVal = (byte)((gs1.Color.B - gs0.Color.B) * y + gs0.Color.B);
                cx = Color.FromArgb(aVal, rVal, gVal, bVal);
            }
            return cx;
        }