所以我正在寻找如何获取RGB颜色列表,这取决于要检索的所需颜色总数,我找到了这段代码。而且有一部分我无法理解,我已经阅读了“>>”的注释和“&”运算符是按位运算符,但我无法完全理解它们在做什么。
任何人都可以帮助我理解颜色值所在的部分 已被分配?
def getDinstinctRGBColorsList(desiredColors)
availableColors = 16000000
inc = availableColors/desiredColors
colorsList = {}
RGB = 0
count = 0
while count <= desiredColors:
RGB = RGB+inc
colorBlue = RGB & 255
colorGreen = (RGB >> 8) & 255
colorRed = (RGB >> 16) & 255
colorsList[count] = str(colorRed) + "," + str(colorGreen) + "," + str(colorBlue)
count += 1
return colorsList
答案 0 :(得分:0)
请参阅BitwiseOperators和What are bitwise shift (bit-shift) operators and how do they work?。
根据您发布的代码,看起来FileUtils.writeLines(new File("output.txt"), encoding, list);
包含24位颜色信息:红色8位,绿色8位,蓝色8位,最左边8位红色数据,中间8位的绿色数据,最右边的8位的蓝色数据。
想象一下RGB
的位看起来像RGB
,其中0brrrrrrrrggggggggbbbbbbbb
是红色值的一位,r
是绿色值的位,{{1有点蓝色值。
请注意,二进制文件中的g
为b
(8个设置位)。
255
使用0b11111111
(右移)和colorGreen = (RGB >> 8) & 255
(按位和)提取代表绿色的中间8位:
>>
收益&
注意绿色位现在是最左边的8位。但是,红色的位仍然存在。
0brrrrrrrrggggggggbbbbbbbb >> 8
收益0b00000000rrrrrrrrgggggggg
请注意如何仅保留绿色位。
编辑:这是一种简化。在Python中,0b00000000rrrrrrrrgggggggg & 0b00000000000000001111111
是算术移位,而不是逻辑移位。算术移位保留符号。有关更详细的说明,请参阅What are bitwise shift (bit-shift) operators and how do they work?。