2013-08-20 88 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它。你必須選擇你自己的算法來找到這個'中點'。