我试图使用numpy在Python中将二进制字符串转换为图像,但我很难找到一种使用非常规位分布的好方法(就我的知识而言)。
这些是如何转换和转换什么的细节。 16位纹理块(256*256)。 每个bitu16表示其颜色为ARGB,MSB至LSB形式的像素:1位透明
5位红色通道5位绿色通道5位蓝色通道
Numpy实际上并不支持任何1位或5位的东西。 我尝试用不同的argb通道设置一个np.dtype,但没有成功。 unpackbits似乎不能在uint16上工作,因此在这种情况下,我可能不得不将其拆分为2个Uint8
dt = np.dtype([('a', np.bool_), ('r', np.half), ('g', np.half), ('b', np.half)])
data = data.read(131072)
dataFromBuffer = np.frombuffer(data, dtype=dt)
img = dataFromBuffer.reshape(256, 256)
在这种情况下,您是正确的,因为您没有bit numpy bit级别的支持。 处理BIT的高级(但实用)方法可如下所示:
image_16_bit = 123 # A 16bit integer.
bits = '{:016b}'.format(image_16_bit)
transparency = int(bits[0], 2)
red_channel = int(bits[1:6], 2)
green_channel = int(bits[6:11], 2)
blue_channel = int(bits[11:], 2)
print(transparency, red_channel, green_channel, blue_channel) # 0 0 3 27
您可以在所有int上运行这个,然后收集正确的值。 最后,您可以将其强制转换为一个numpy数组,以获得作为numpy数组的图像。