RGB整型转换为RGB - Python

26 投票
11 回答
71620 浏览
提问于 2025-04-15 19:16

我该如何把一个RGB整数转换成对应的RGB元组 (R,G,B) 呢?听起来很简单,但我在谷歌上找不到相关的信息。

我知道对于每一个RGB (r,g,b),都有一个整数 n = r256^2 + g256 + b,那么在Python中,我该如何反向计算,也就是说,给定一个 n,我需要得到 rgb 的值。

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)。对于绿色和红色的部分,它也是这样做的,但首先会把颜色通道移动到最低的字节。

撰写回答