我希望在Python中实现一个2d位映射类.该课程有以下要求:
允许创建任意大小的2d位图.即创建一个8 x 8位图(8字节),如:
bitmap = Bitmap(8,8)
提供一个API来访问这个2d映射中的位作为布尔值或甚至整数值,即:
if bitmap[1, 2] or bitmap.get(0, 1)
能够以打包的二进制数据的形式检索数据.本质上,它将位图的每一行连接起来并作为二进制数据返回.它可以填充到最近的字节或类似的东西.
bitmap.data()
能够从检索到的二进制数据创建新地图:
new_bitmap = Bitmap(8, 8, bitmap.data())
我知道Python能够执行二进制操作,但我想知道如何最好地使用它们来实现这个类.
Bit-Packing numpy(SciPY)数组可以满足您的需求.该示例显示4x3位(布尔)数组打包为4个8位字节.unpackbits将 uint8数组解压缩为可在计算中使用的布尔输出数组.
>>> a = np.array([[[1,0,1], ... [0,1,0]], ... [[1,1,0], ... [0,0,1]]]) >>> b = np.packbits(a,axis=-1) >>> b array([[[160],[64]],[[192],[32]]], dtype=uint8)
如果您需要1位像素图像,PIL就是您的最佳选择.