如何在 flutter 中将三位十六进制字符串转换为颜色

How do I convert three digit hexadecimal String to Color in flutter

我想将“#0ff”这个十六进制字符串转换成颜色

我已经搜索过了,但是我只找到了长度为6位的十六进制字符串的答案

如果我这样做Color(0xFF0ff)它什么都不显示

提前致谢!

Web 以三种方式定义颜色:显式颜色名称、3 个十六进制数字或 6 个十六进制数字。

如果您有 3 位数字,则应将每个数字“加倍”(作为字符,而不是值),因此 #abc 应读作 #aabbcc。为什么?它很短,有助于 select 更少的颜色(在过去我们有 8 或 16 位颜色),并且屏幕可能不那么准确。

你的 #0ff 是否应该读作 #00ffff

注意:这 3 位数字颜色现在被认为 过时,请参阅 https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#simple-colour,但仍在许多地方使用(例如 #fff 表示白色)。

GC“接受”的答案在很多方面都是不正确的,事实上,他唯一正确的就是#0ff = #00ffff。

首先,当前标准 CSS 的颜色和网页内容在这里:

https://www.w3.org/TR/css-color-3/#numerical

#0ff 是完全合法且没有过时的颜色定义。

为网络定义 sRGB 颜色的允许形式是:

* { color: #f00; }                /* #rgb */
* { color: #ff0000; }             /* #rrggbb */
* { color: rgb(255,0,0); }        /* each value is 0-255 */
* { color: rgb(100%, 0%, 0%); }   /* each value is 0%-100% */
* { color: hsl(0, 100%, 50%); }   /* red using hsl "hue sat lightness" */
* { color: "red"; }               /* color keyword */

上面未显示:透明度或 alpha 语法。

弦论

对于列表中的前两个,颜色值被解析为 STRING 数据类型而不是数值。

If I do like this Color(0xFF0ff) It displays nothing

当您 Color(0xFF0ff) 它无效并被忽略。 0x123456 是十六进制的数值,等于整数值 1193046 将其写为 字符串 对 CSS 类型有效颜色定义,需要写成#123456

三的公司,六是克隆人。或者西斯。或者什么...

在“三位数”格式中,每个十六进制值都是重复的(克隆 LOL),所以 #abc 变成了 #aabbcc。

对于数学定义,0xCC = 0xC * 0x10 + 0xC 所以如果我们有十六进制数字 0xABC:

0xAABBCC = 0xA * 0x110000 + 0xB * 0x1100 + 0xC * 0x11

因此,如果您使用数字数据类型,则使用 x = 0x123456,但如果您将字符串发送到其他 API,则 x = #123456 ... 还有请记住,如果您需要接受 #123456,它将是一个字符串,除非您将其转换为数字,在 JS 中使用 parseInt(x,base); 很容易,其中基数当然是 16.

评论不同答案的旁注:

GC 说:

Why? It is short, and it helped to select fewer colours (in the olden time we have 8 or 16bit colours), and screens may not be so accurate.

None 这个是相关的。 #rgb 和 #rrggbb 从 90 年代中期开始就一直在 CSS 标准中,#rgb ALWAYS 扩展到 #rrggbb,无论系统功能如何,并且在 90 年代中期,每通道 8 位(又名 24 位颜色)是标准,今天仍然如此。

此外,颜色是设计和表现的一部分,设计应该抽象为CSS,而不是在用于内容结构的 HTML 中。

HTML 规范想要“简化”颜色声明这一事实更多地与解析 DOM 的效率有关,与您提到的无关。颜色根本不应该在 HTML 中,它们应该在 CSS 中,我向你保证 #rgb 不是“过时的”,它是最新 CSS 颜色标准的重要组成部分一个月前批准,链接在此 post.

三位数颜色的“实际原因”更易于使用

#fea#fcecb0 更容易记住,但它们在外观上几乎相同。

当您需要精确匹配图像中的 8 位 sRGB 颜色时,完整的#rrggbb 很有用。否则,使用#rgb 而不是#rrggbb 没有问题,并且有很多理由这样做,none 其中与位深度有关,也不是关于“屏幕精度”,现在仍然取决于用户调整和校准。