我想給用戶添加一個選項來指定顏色。我希望它接受合理的顏色表示,可能包括十六進制表示和各種CSS顏色。乍一看ColorTranslator.FromHtml()
似乎是我需要的,但經過一些實驗後,我不太確定。ColorTranslator.FromHtml()支持什麼,以及它爲什麼偏離CSS顏色解釋規則?
The MSDN documentation,仔細閱讀,似乎暗示ColorTranslator.FromHtml()
應該支持CSS顏色規範。但是,它似乎不支持CSS提供的每種語法。例如,這將引發異常:
// "rgb(255 is not a valid value for Int32"
Color c = ColorTranslator.FromHtml("rgb(255,255,255)");
其他顏色都不同解析爲CSS規則發現here。一個8位十六進制碼被解釋爲AARRGGBB代替RRGGBBAA:
Color c = ColorTranslator.FromHtml("#aabbccdd");
// 187, 204, 221, 170
Console.WriteLine($"{c.R}, {c.G}, {c.B}, {c.A}");
A 4位十六進制碼被解釋爲RRGG(與藍色部分是零),而不是RGBA:
Color c = ColorTranslator.FromHtml("#abcd");
// 0, 171, 205, 0
Console.WriteLine($"{c.R}, {c.G}, {c.B}, {c.A}");
爲什麼這些偏差存在,該方法支持什麼?只是該方法在老版本的CSS中已老化並且被凍結,但是一些擴展與最近的CSS標準相沖突?
文檔的任何部分都不建議它支持您指定的任何格式。 「此方法將HTML顏色名稱(如藍色或紅色)的字符串表示形式轉換爲GDI + Color結構。」 – ndonohoe
@ndonohoe,但它支持字符串,如「#aabbcc」,並給出了人們可能期望的結果。 – Hammerite