首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Python转换此RGB格式

问如何用Python转换此RGB格式
EN

Stack Overflow用户
提问于 2014-09-24 04:46:26
回答 2查看 1.7K关注 0票数 0

我正在阅读Python中的一些值。这些值以一种奇怪的格式出现。文件上说:

颜色由0到8355711之间的单个值表示。RGB(r,g,b)函数计算((R*127 x 2^16) + (G*127 x 2^8) + B*127),其中R、G和B是0.00至1.00之间的值。

Som,红色的值为16712965,我很想知道如何将这些值“解压缩”为元组或什么的,但是我很难理解这个数学。如果这是不可能的,以某种方式将该值转换为rgb值的方法将是很好的。请帮帮我!谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 10:22:41

你在文字上有错误

  • Red=16712965=0xFF0505h
  • 超出了您声称的极限8355711=7F7F7Fh范围。

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

  • 最常见的是每R,G,B通道压缩成32位的8位。
  • 你的看上去像每个通道8位(7位)被塞进?位值

你到底想要什么?

  • 双R,G,B值在<0.0,1.0>范围内从int?
  • 不是C++中的python编码器,它看起来如下所示: // 8(使用7比特)每通道双R=double(col>>16)/127.0;双G=double(col>> 8)/127.0;双B=double(col )/127.0;// 8位/每通道双R=double(col>>16)/255.0;双G=double(col>> 8)/255.0;双B=double(col )/255.0;
  • x>>n是指x值为n位的算术位右移(将零填充到MSB位)。
  • 它与x/(2^n)相同

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-24 05:12:55

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26008757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档