如何在Python中转换此RGB格式

时间:2014-09-24 04:46:27

标签: python math colors

我正在阅读Python中的某些内容。值以奇怪的格式出现。文档说:

Color is represented by a single value from 0 to 8355711. The RGB(r,g,b) function calculates
((R*127 x 2^16) + (G*127 x 2^8) + B*127), where R, G and B are values between 0.00 and 1.00

Som,红色的值为16712965我很想知道如何解开'那些价值作为一个元组或其他东西,但我正在努力与数学。如果这是不可能的,那么以某种方式将该值转换为rgb值的方法会很棒。请帮忙!感谢

2 个答案:

答案 0 :(得分:1)

注意公式中的2 ^ 8和2 ^ 16,这表明您可以使用类似于C中的右移的东西。将输入数除以2 ^ 8 = 256相当于8位右移。这里要注意的另一点是你的R,G,B输出值是实数。因此,您希望在计算过程中使用float函数。

c = 8355711
print 'input colour', c

# conversion to RGB format
B = float( c % 256 )/127.0
c = c / 256
G = float( c % 256)/127.0
c = c / 256
R = float( c % 256)/127.0

print R, G, B

# reverse calculation for verifying the result
colour = int((R*127 * 65536) + (G*127 * 256) + B*127)
print colour

答案 1 :(得分:1)

你的文字错误

  • 红色= 16712965 = 0xFF0505h
  • 超出了您声明​​的限制范围8355711 = 7F7F7Fh

那么你的源和目标颜色格式究竟是什么?

  • 最常见的是每R的8位,G,B通道打包成32位值
  • 你的看起来像每通道8位(使用7位)打包成?位值

你究竟想要什么?

  • 双R,G,B值在范围<0.0,1.0>范围内。来自int col?
  • 不是C ++中的python编码器,它看起来像这样:

    // 8(7 used) bit per channel
    double R=double(col>>16)/127.0;
    double G=double(col>> 8)/127.0;
    double B=double(col    )/127.0;
    
    // 8 bit per channel
    double R=double(col>>16)/255.0;
    double G=double(col>> 8)/255.0;
    double B=double(col    )/255.0;
    
  • x>>n表示值为x的算术位右移(填充零到MSB位)n位

  • x/(2^n)
  • 相同

如果您需要不同的转化,则必须指定它。