最后我最后问这里!
我们已接受将int
颜色从此网站的某处转换为HEX String
的答案。
答案中有这一行,我有点迷失自己。
String.format("#%06X", (0xFFFFFF & anyColor));
我迷失在上面代码中这部分“位屏蔽”的地方。
这是我到目前为止所学到的:
int
颜色为32位int
,其中包含ARGB信息。
那么在上面的“位屏蔽”过程中,Alpha通道如何被屏蔽掉RGB部分?
到目前为止,我自己尝试过的是:
让我们说上面的anyColor有这个ARGB值与argb(250,25,50,75)。
对于RED频道,以及上面的代码开始; 位屏蔽首先是这样做的吗?
0000 0000 0000 0000 0000 0000 0001 1001
使用0x0000ff
0000 0000 0000 0000 0000 0000 1111 1111
或者,RED通道首先从其原始的int颜色值向左移动,然后像这样应用位掩码吗?
RED <<
16
0000 0000 0001 1001 0000 0000 0000 0000
然后掩盖了比特?
F F
0000 0000 1111 1111 0000 0000 0000 0000
OR,位掩码用0xFFFFFF一次完成所有RGB通道?
0000 0000 1111 1111 1111 1111 1111 1111
我想知道的是在那里做了什么位掩码?任何伟大的解释将不胜感激。感谢。
答案 0 :(得分:0)
OR,位掩码用0xFFFFFF一次完成所有RGB通道?
AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB
那是对的。
ARGB颜色以二进制形式编码,格式如下:
0xffffff
其中每个字母代表相应组件的一位。
有问题的掩码是0000 0000 1111 1111 1111 1111 1111 1111
,它是8位零,后跟24位的:
0000 0000 RRRR RRRR GGGG GGGG BBBB BBBB
通过执行掩码和ARGB颜色的按位 AND,可以创建RGB表示:
;with cte_1
AS
( SELECT DISTINCT RoomId
FROM YourTable
WHERE Occupancy='Occupied' AND Status='Predervation')
SELECT RoomId,1 Status
FROM cte_1
UNON
SELECT DISTINCT RoomId,0 Status
FROM YourTable t
WHERE NOT EXISTS(SELECT 1 FROM cte_1 c
WHERE t.RoomId=c.RoomId)