我想向 API 添加一个选项,供用户指定某物的颜色。我希望它接受合理的颜色表示,可能包括十六进制表示以及各种 CSS 颜色。乍一看,ColorTranslator.FromHtml()
似乎是我所需要的,但经过一些实验后我不太确定。
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}");
4 位十六进制代码被解释为 RRGG(蓝色部分为零)而不是 RGBA:
Color c = ColorTranslator.FromHtml("#abcd");
// 0, 171, 205, 0
Console.WriteLine($"{c.R}, {c.G}, {c.B}, {c.A}");
为什么会存在这些偏差,该方法究竟支持什么?是否只是该方法过时并卡住在较旧版本的 CSS 中,但在与较新的 CSS 标准发生冲突时添加了一些扩展?
最佳答案
我不能告诉你为什么,但我可以告诉你支持什么。
如果您阅读 Source您可以看到颜色是如何处理的,基本上:
#771122
处理为#RRGGBB
#712
处理为#RGB
LightGrey
转换为LightGray
- 任何系统颜色名称(例如
highlighttext
)都会转换为特定颜色。 - 任何其他颜色名称都将使用
Color.FromName
创建(我认为)
我认为这是在您提到的大多数内容甚至存在于规范之前的时间。
关于c# - ColorTranslator.FromHtml() 到底支持什么,为什么会偏离 CSS 颜色解释规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696697/