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」などの 16 進数値に変換する必要があります. 可能ですか? 可能ならどうすればよいですか? 前もって感謝します

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 に答える