如何将LinearGradientBrush值转换为字符串值或颜色值。 我有一个返回LinearGradientBrush值的方法
private LinearGradientBrush SetBackground(string color1, string color2)
{
LinearGradientBrush brush = new LinearGradientBrush();
brush.StartPoint = new Point(0, 0);
brush.EndPoint = new Point(0, 1);
GradientStop gra1 = new GradientStop();
gra1.Color = (Color)ColorConverter.ConvertFromString(color1);
gra1.Offset = 1;
GradientStop gra2 = new GradientStop();
gra2.Color = (Color)ColorConverter.ConvertFromString(color2);
gra2.Offset = 0;
brush.GradientStops.Add(gra1);
brush.GradientStops.Add(gra2);
return brush;
}
我需要将此返回值转换为字符串类型或十六进制值,例如“FFFF00”表示,是否可能,如果是,如何执行此操作? 提前致谢
答案 0 :(得分:2)
执行此操作的一种相对简单的方法是将各种属性输出到字符串。在这里使用大脑编译器,但不会像下面那样容易:
private string LinearGradientBrushToString(LinearGradientBrush brush)
{
StringBuilder output = new StringBuilder();
output.Append(brush.StartPoint.X + "," + brush.StartPoint.Y);
output.Append("|" + brush.EndPoint.X + "," + brush.EndPoint.Y);
foreach(GradientStop g in brush.GradientStops)
{
output.Append("|" + g.Offset + "," + ColorConverter.ConvertToString(g.Color));
}
return output.ToString();
}
这应该输出一个字符串,该字符串具有转换为字符串的键属性,并以管道和逗号分隔的格式放置。很容易使用String.Split()
将其分解并再次从中创建一个画笔。
答案 1 :(得分:0)
看......颜色是单点纯色。线性渐变是色点的集合。这意味着,如果您想将一个点与一个规则进行比较,您应该进行一些转换或类似的事情。
public static class LinearGratientBrushExtensions
{
public static Color AverageColor(this LinearGradientBrush brush)
{
return brush.GradientStops[(int)Math.Round((double)((brush.GradientStops.Count() - 1) / 2), 0)].Color;
}
}
提供的扩展方法使用简单的“中间点”方法,拾取颜色规则的中间点并返回它。您必须选择自己的算法来找到这个“中间点”。