将整数转换为RGB值并使用Python返回

M_P*_*_PF 10 python rgb integer colors argb

我有两个函数,一个是从给定的Integer返回RGB值,另一个函数反向,为它提供RGB值,它返回一个Integer.我通过查看转换为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
Run Code Online (Sandbox Code Playgroud)

考试:

i1 = 2147483647
colr1 = getRGBfromI(i1)
print colr1 # returns (255,255,255)

i2 =getIfromRGB(colr1)

print i1, i2 # returns 2147483647 16777215
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎getRGBfromI()是正确的,getIfromRGB()是不正确的,但我也可能是错的.

Pyn*_*hia 9

这两个功能似乎都运行良好.

由24位整数表示的最大值(暂时忘记符号)是

mx = pow(2,24)-1 # i.e. 16777215
Run Code Online (Sandbox Code Playgroud)

所以

i1 = 2147483647
Run Code Online (Sandbox Code Playgroud)

高于mx

colr1 = getRGBfromI(i1)
Run Code Online (Sandbox Code Playgroud)

正确给出

(255, 255, 255)  # better to view it in hex as 0xFFFFFF
Run Code Online (Sandbox Code Playgroud)

因为它会删除高于24的位(0xFFFFFF占用从0到23的位)

反之亦然,

i2 = getIfromRGB(colr1)
Run Code Online (Sandbox Code Playgroud)

正确给出

16777215
Run Code Online (Sandbox Code Playgroud)

这是您可以用24位表示的最大值(即mx上面的值).

如果在1L瓶中倒入1.4升水,溢流中会有一些水流失.当你清空瓶子时,你会发现最大1L

  • 我假设上限是2147483647,但是如果我使用32位(对于ARGB值)并且在这里我只使用24(RGB)则可行.我的错误在于输入而不是代码.感谢您指出了这一点. (2认同)