如何在Python中转换此RGB格式
我正在从Python中读取一些值。这些值的格式很奇怪。文件说:如何在Python中转换此RGB格式,python,math,colors,Python,Math,Colors,我正在从Python中读取一些值。这些值的格式很奇怪。文件说: Som,红色的值为16712965我很想知道如何将这些值“解包”为元组之类的东西,但我正在努力解决这个问题。如果这是不可能的,以某种方式将该值转换为rgb值的方法将非常有用。请帮忙!感谢注意公式中的2^8和2^16,这表明您可以使用类似于C中右移的东西。将输入数字除以2^8=256相当于8位右移。这里需要注意的另一点是,R,G,B的输出值是实数。因此,您希望在计算过程中使用float函数 c = 8355711 print 'inp
Som,红色的值为
16712965
我很想知道如何将这些值“解包”为元组之类的东西,但我正在努力解决这个问题。如果这是不可能的,以某种方式将该值转换为rgb值的方法将非常有用。请帮忙!感谢注意公式中的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
你的文字有错误
- 红色=16712965=0xFF0505h
- 超出您的索赔限额范围8355711=7F7F7Fh
- 最常见的是每R、G、B通道8位压缩为32位值
- 您的每个频道看起来像8比特(使用了7比特)打包到??位值
- 双R、G、B值,范围为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的算术位右移n位(将零填充到MSB位)x/(2^n)
如果需要不同的转换,则必须指定它。是否尝试过除法?是的,但我不确定如何将一个整数拆分为三个…它所做的只是将其转换为十六进制(乘以2的幂等于位移位)。试着用谷歌搜索在十六进制和rgb之间来回转换,到处都是,包括这里,你试过模了吗?这看起来非常接近,但是,我不确定我的数学是否正确:例如,当我尝试以下结果时:
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)color=int((R*127*65536)+(G*127*256)+B*127)print(color)
不会返回相同的值(但非常接近)。类似地,RGB值似乎介于0-1之外的值(可能介于1和3之间?)@Startec,您提供的信息8912743
应为无效颜色,生成它的唯一方法是使用G=2.0079
。感谢您捕获错误。我不知道这是怎么发生的。你解释得很好。
// 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;