将整数转换为 RGB 值并返回 Python
convert Integers to RGB values and back with Python
我有两个函数,一个是给定整数的 return RGB 值,另一个函数则相反,为它提供 RGB 值,它是一个整数。我通过查看我转换为 RGB 的整数是否从 RGB 变回原始整数值来对此进行测试,但我得到了不同的值。
def getRGBfromI(RGBint):
blue = RGBint & 255
green = (RGBint >> 8) & 255
red = (RGBint >> 16) & 255
return red, green, blue
def getIfromRGB(rgb):
red = rgb[0]
green = rgb[1]
blue = rgb[2]
print red, green, blue
RGBint = (red<<16) + (green<<8) + blue
return RGBint
测试:
i1 = 2147483647
colr1 = getRGBfromI(i1)
print colr1 # returns (255,255,255)
i2 =getIfromRGB(colr1)
print i1, i2 # returns 2147483647 16777215
对我来说,getRGBfromI() 似乎是正确的,而 getIfromRGB() 是不正确的,但我也可能错了。
您的代码没有任何问题。 值不同,因为您将 2147483647 作为输入,转换为 十六进制,输出为0x7FFFFFFF
。另一方面,16777215 是 十六进制 中的 0xFFFFFF
,因此您明白您的代码实际上没有任何问题,除了事实上你给出了这么大的十进制数作为输入。
如果你输入:
你可以测试一下
print i1 & 0xFFFFFF, i2 # this will return equal values
这两个功能似乎都运行良好。
一个24位整数(先忘了符号)表示的最大值是
mx = pow(2,24)-1 # i.e. 16777215
所以
i1 = 2147483647
高于mx
和
colr1 = getRGBfromI(i1)
正确给出
(255, 255, 255) # better to view it in hex as 0xFFFFFF
因为它把高于24的位都删掉了(0xFFFFFF占用0到23的位)
反之亦然,
i2 = getIfromRGB(colr1)
正确给出
16777215
这是您可以用 24 位表示的最大值(即上面的 mx
)。
如果将 1.4 升水倒入 1 升的瓶子中,溢出时会损失一些水。
当你倒空瓶子时,你会发现 max
是 1L
我有两个函数,一个是给定整数的 return RGB 值,另一个函数则相反,为它提供 RGB 值,它是一个整数。我通过查看我转换为 RGB 的整数是否从 RGB 变回原始整数值来对此进行测试,但我得到了不同的值。
def getRGBfromI(RGBint):
blue = RGBint & 255
green = (RGBint >> 8) & 255
red = (RGBint >> 16) & 255
return red, green, blue
def getIfromRGB(rgb):
red = rgb[0]
green = rgb[1]
blue = rgb[2]
print red, green, blue
RGBint = (red<<16) + (green<<8) + blue
return RGBint
测试:
i1 = 2147483647
colr1 = getRGBfromI(i1)
print colr1 # returns (255,255,255)
i2 =getIfromRGB(colr1)
print i1, i2 # returns 2147483647 16777215
对我来说,getRGBfromI() 似乎是正确的,而 getIfromRGB() 是不正确的,但我也可能错了。
您的代码没有任何问题。 值不同,因为您将 2147483647 作为输入,转换为 十六进制,输出为0x7FFFFFFF
。另一方面,16777215 是 十六进制 中的 0xFFFFFF
,因此您明白您的代码实际上没有任何问题,除了事实上你给出了这么大的十进制数作为输入。
如果你输入:
你可以测试一下print i1 & 0xFFFFFF, i2 # this will return equal values
这两个功能似乎都运行良好。
一个24位整数(先忘了符号)表示的最大值是
mx = pow(2,24)-1 # i.e. 16777215
所以
i1 = 2147483647
高于mx
和
colr1 = getRGBfromI(i1)
正确给出
(255, 255, 255) # better to view it in hex as 0xFFFFFF
因为它把高于24的位都删掉了(0xFFFFFF占用0到23的位)
反之亦然,
i2 = getIfromRGB(colr1)
正确给出
16777215
这是您可以用 24 位表示的最大值(即上面的 mx
)。
如果将 1.4 升水倒入 1 升的瓶子中,溢出时会损失一些水。 当你倒空瓶子时,你会发现 max
是 1L