c# - ColorTranslator.FromHtml() 到底支持什么,为什么会偏离 CSS 颜色解释规则?

标签 c# css .net colors

我想向 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/

相关文章:

c# - 使用 openxml 创建折线图

c# - 查看类型是否可实例化

javascript - 使用 jquery 更改简单的 css

c# - 为什么从设置中调用 StringCollection 很慢?

c# - 带有 bool 检查的 LINQ 查询

c# - 在 C# 的 short[] 数组中用数字创建逗号分隔字符串的最佳方法是什么?

javascript - css 切换开关状态

css - 为什么我的样式没有应用于自定义 Toast 类?

.net - 在网站中注销用户后,他丢失了上一个 session 的用户保存数据

c# - TFS 构建服务器在警告 "Cannot find the last label"后卡住