在python中将十六进制转换为15位RGB值

时间:2018-07-30 14:02:14

标签: python rgb bit-shift

我是一个使用python的初学者,想制作一个将十六进制RGB值转换为15位RGB值(每种颜色5位)的程序,我听说可以通过移位来完成,但是我不知道如何在互联网上也找不到任何有用的东西,有人可以帮我吗

1 个答案:

答案 0 :(得分:0)

如果您手动执行此操作(例如,用于家庭作业),请考虑以下问题:

如果您有六种颜色的十六进制表示形式(例如"7FD87F"),则它由RGB成分R:7F,G:D8,B:7F组成。

两个十六进制数字可以编码256个不同的状态(16 ^ 2 = 256),因此每个分量的大小均为8位(256 = 2 ^ 8)。

您想将值转换为一个色彩空间,其中每个分量均以5位表示。这样做的方法是丢弃每个组件中的三个最低有效位。例如:

0b10101010 => 0b10101

正如您正确提到的那样,您可以通过位移来实现。然后,您需要重新组合组件。提示一下,这是将原始8位组件重新组合为单个24位表示形式的方法:

(R << 16) + (G << 8) + (B << 0) 
# or just B since a shift by zero is equivalent to
# multiplying by 2^0 is
# multiplying by 1 is
# the multiplicative identity

因此,假设您是以十六进制字符串而不是整数开头,那么算法的概图:

  1. 将十六进制字符串拆分为单独的颜色分量
  2. 将字符串表示形式转换为数字表示形式
  3. 对组件进行位移
  4. 将5位组件重组为15位表示形式

另外,第1步和第2步可以互换,但有一些位屏蔽和更多的位移。