我希望在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能够执行二进制操作,但我想知道如何最好地使用它们来实现这个类。
答案 0 :(得分:5)
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就是你要看的地方。
答案 1 :(得分:4)
无需自己创建。
使用非常好的Python Imaging Library(PIL)