LinearGradientBrush转换器

时间:2013-08-20 05:34:58

标签: c#

如何将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”表示,是否可能,如果是,如何执行此操作? 提前致谢

2 个答案:

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

提供的扩展方法使用简单的“中间点”方法,拾取颜色规则的中间点并返回它。您必须选择自己的算法来找到这个“中间点”。