【问题标题】:How to Convert This RGB format in Python如何在 Python 中转换这种 RGB 格式
【发布时间】:2014-11-18 11:11:09
【问题描述】:

我正在从 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 的幂与位移相同)。尝试在 hex 和 rgb 之间来回搜索谷歌搜索,它覆盖了所有地方,包括这里,就像这里 stackoverflow.com/questions/214359/…
  • 你试过模数吗?

标签: python math colors


【解决方案1】:

你的文字有误

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

那么你的源和目标颜色格式到底是什么???

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

你到底想要什么?

  • 从 int col 到 范围内的双 R、G、B 值?
  • 不是 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 的算术位移右移 n 位(将零填充到 MSB 位)

  • x/(2^n)

如果您想要不同的转换,那么您必须指定它。

【讨论】:

  • 感谢您发现错误。不知道那是怎么发生的。你解释得很好。
【解决方案2】:

请注意公式中的 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

【讨论】:

  • 这似乎非常接近,但是,我不确定我的数学是否正确:例如,当我尝试使用以下结果时:c = 8912743 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) colour = int((R*127 * 65536) + (G*127 * 256) + B*127) print(colour) 不会返回相同的值(但是很接近)。同样,RGB 值似乎介于 0 到 1 之间(也许介于 1 到 3 之间?)
  • @Startec 与您提供的信息 8912743 应该是无效颜色,产生它的唯一方法是使用 G=2.0079
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2012-03-02
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 2017-08-09
相关资源
最近更新 更多