欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

电子行业中,以0x开头颜色表示法和以#开头的颜色表示法有什么区别?

程序员文章站 2022-05-15 17:22:57
...
最近遇到一些特殊的情况。我发现rgb颜色除了以#开头表示以外,还有以0x开头表示的。但是Google和百度上都找不到相关的介绍。不知道有没有从事相关研究的大哥仔细讲解两者之间的区别?

回复内容:

长懒看的请看最后一段结论。

从计算机的数值表示上讲,0x开头的其实并不是所谓颜色代码的表示方法,而是16进制数的标准写法。譬如0xA就是十进制的10。
而#开头的六(或三)位十六进制数是在设计领域(如CSS以及一些绘图软件)中颜色代码的表示方法。

如果我们只考虑24位颜色的话,电脑中每个像素的颜色其实就是用3个字节(24位)的无符号整数来存储的。所以用0x开头的“颜色代码”,也就是这个十六进制数表示的数值,其实就是颜色在内存(显存)中的存储方式。
为什么不采用我们常见的10进制数而要采用0x开头的16进制数来表示颜色呢?因为在颜色这3个字节中,大家规定17-24位表示红色的分量,9-16位表示绿色的分量,1-8位表示蓝色的分量,因此一个十进制数16777215表示的颜色虽然很难给我们一个直观的感觉,而将它转换成16进制数0xFFFFFF我们就可以很轻易的看出前两位FF表示红色,中间两位FF表示绿色,后面两位FF表示蓝色。这个数值表示白色。
于是就出现了阁下熟悉的在设计领域我们就使用#开头的6位十六进制数来表示颜色的方式,这样一来,既直观又可以方便地在内存中进行转换与存储。
所以我们说#开头的六位十六进制数仅仅表示颜色,0x开头的数字表示包括颜色在内的一般数值

于是我们就可以阐述出它们的区别:
我们知道,在十进制中0123和123是相等的两个数字,所以0x000FFF和0xFFF是相等的两个数值,也就表示相同的两个颜色。但是#000FFF和#FFF表示的却是两个不同的颜色。在CSS(以及部分绘图软件中)#后面跟3个十六进制数是被允许的,比如#ABC表示的颜色和#AABBCC表示的颜色相同。但是跟1、2、4、5个十六进制数仍然是非法的颜色代码。所以#000FFF表示蓝色掺了一点绿,#FFF即#FFFFFF表示白色,#0FFF什么都不表示,是非法的颜色代码。 楼主所说的颜色空间是RGB空间,这个颜色空间能够表示绝大多数肉眼可见的颜色。但是缺点是不好量化,因为其将色调、亮度、饱和度融在一块了。
除此之外的颜色空间还有:CMYK(青、洋红、黄、黑,用于墨盒中)、HSI(色调、饱和度、强度,用于数字化处理颜色)等。
颜色值一共6位,以16进制表示,前两位表示红色值,中间两位表示绿色值,最后两位表示蓝色值。 0xAARRGGBB
#RRGGBB
rgba(r,g,b,a) --- (00xefeff4
相关标签: Google rgb