2013-05-08 119 views

回答

3

Color類只能通過兩種方式創建自定義顏色對象:

  • 使用衆所周知的顏色之一(作爲字符串或通過KnownColor枚舉)表示Windows主題元素或系統顏色
  • 使用組件的整數值。

還有什麼,你需要自己解析數據並提取顏色的A,R,G和B組件。在你的情況下,你可能想要提取[]內部的內容,將它們拆分爲,,然後使用Int32.Parse()來讀取各個值。假設字符串總是採用相同的格式,如下所示:

var elements = color.Substring(7, color.Length - 8) 
    .Split(',') 
    .Select(x => x.Split('=')) 
    .ToDictionary(x => x[0].Trim(), x => x[1].Trim()); 

var components = new int[] 
{ 
    int.Parse(elements["A"]), 
    int.Parse(elements["R"]), 
    int.Parse(elements["G"]), 
    int.Parse(elements["B"]) 
}; 

var newColor = Color.FromArgb(components[0], components[1], components[2], components[3]); 

當然,有適當的錯誤檢查等。

2

同意@邁克爾Edenfield,只是提出一個小的改進自己的代碼:

var elements = color.Substring(7, color.Length - 8) 
      .Split(',') 
      .Select(x => x.Split('=')) 
      .ToDictionary(x => x[0].Trim(), x => int.Parse(x[1])); 

var newColor = Color.FromArgb(elements["A"], elements["R"], elements["G"], elements["B"]); 
1

您可以使用String.SubstringString.IndexOf方法也提取您的信息。只要您的數據具有某種可預測的格式,它就會工作。

char[] trimChars = new char[] { ',', ' ' }; 
byte A, R, G, B; 
string color = @"Color [A=255, R=245, G=243, B=244]"; 

byte.TryParse((color.Substring(color.IndexOf('A') + 2, 3)).Trim(trimChars), out A); 
byte.TryParse((color.Substring(color.IndexOf('R') + 2, 3)).Trim(trimChars), out R); 
byte.TryParse((color.Substring(color.IndexOf('G') + 2, 3)).Trim(trimChars), out G); 
byte.TryParse((color.Substring(color.IndexOf('B') + 2, 3)).Trim(trimChars), out B); 

Color newColor = Color.FromArgb(A,R,G,B);