RGB整型转换为RGB - Python
我该如何把一个RGB整数转换成对应的RGB元组 (R,G,B)
呢?听起来很简单,但我在谷歌上找不到相关的信息。
我知道对于每一个RGB (r,g,b)
,都有一个整数 n = r256^2 + g256 + b
,那么在Python中,我该如何反向计算,也就是说,给定一个 n
,我需要得到 r
、g
、b
的值。
11 个回答
10
>>> import struct
>>> str='aabbcc'
>>> struct.unpack('BBB',str.decode('hex'))
(170, 187, 204)
for python3:
>>> struct.unpack('BBB', bytes.fromhex(str))
和
>>> rgb = (50,100,150)
>>> struct.pack('BBB',*rgb).encode('hex')
'326496'
for python3:
>>> bytes.hex(struct.pack('BBB',*rgb))
21
从一个RGB整数开始:
Blue = RGBint mod 256
Green = RGBint / 256 mod 256
Red = RGBint / 256 / 256 mod 256
一旦你知道怎么获取它,这个实现起来就非常简单。 :)
更新:添加了一个Python函数。不确定是否有更好的方法,但这个在Python 3和2.4上都能工作。
def rgb_int2tuple(rgbint):
return (rgbint // 256 // 256 % 256, rgbint // 256 % 256, rgbint % 256)
还有一个很棒的解决方案,使用了位移和掩码的方法,肯定比Nils Pipenbrinck发布的要快得多。
59
我并不是Python方面的专家,但据我所知,Python和C语言有相同的运算符。
如果是这样的话,这段代码应该能正常工作,而且比用取模和除法要快很多。
Blue = RGBint & 255
Green = (RGBint >> 8) & 255
Red = (RGBint >> 16) & 255
这段代码的作用是把每个数值中最低的那一位(也就是最低的一个字节)给遮住了(通过和255进行按位与运算,255的二进制表示是8个1)。对于绿色和红色的部分,它也是这样做的,但首先会把颜色通道移动到最低的字节。