1

如何将 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”表示,是否可以,如果可以,怎么做?提前致谢

4

2 回答 2

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()其分解并再次从中创建刷子。

于 2013-08-20T05:58:18.680 回答
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;
    }
}

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

于 2016-03-09T17:37:38.800 回答