2013-08-20 47 views
1

如何将LinearGradientBrush值转换为字符串值或颜色值。 我有它返回一个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

我觉得首先需要问的一个问题是为什么你需要将它转换为字符串?它是用于序列化的目的吗?描述性目的? – Adrian

+0

是的,它的序列化目的。 – joedanny

回答

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()将其分解出来并再次创建一个画笔。

+0

很好,但是可以将lineargrdientbrush值转换为十六进制值,如“#fff000”。 – joedanny

+0

显然不是。线性渐变画笔的全部要点是绘制*渐变*。这需要多种颜色。但是,是的,阿德里安认为是唯一的解决方案。像刷子这样的本地对象不能被直接序列化。你唯一的选择是保存它们的属性,读回它们,并构造一个新的类似的对象。 –

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; 
    } 
} 

所提供的扩展方法使用一个简单的“点中的中间人”的方法,拿起颜色规则的中点和returnin它。你必须选择你自己的算法来找到这个'中点'。