如何在 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 其中与位深度有关,也不是关于“屏幕精度”,现在仍然取决于用户调整和校准。
我想将“#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 其中与位深度有关,也不是关于“屏幕精度”,现在仍然取决于用户调整和校准。