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; }
Thursday, March 5, 2015
Break Gradient Color into Pieces
Subscribe to:
Posts (Atom)