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:
Comments (Atom)