4

我希望在 Python 中实现一个 2d 位图类。该类将具有以下要求:

  1. 允许创建任意大小的 2d 位图。即创建一个 8 x 8 位图(8 个字节),例如:

    bitmap = Bitmap(8,8)
    
  2. 提供一个 API 来访问这个 2d 映射中的位作为布尔值甚至整数值,即:

    if bitmap[1, 2] or bitmap.get(0, 1)
    
  3. 能够将数据检索为打包的二进制数据。本质上,它将位图的每一行连接起来并作为二进制数据返回。它可以填充到最近的字节或类似的东西。

    bitmap.data()
    
  4. 能够从检索到的二进制数据创建新地图:

    new_bitmap = Bitmap(8, 8, bitmap.data())
    

我知道 Python 能够执行二进制操作,但我想要一些关于如何最好地使用它们来实现此类的建议。

4

2 回答 2

7

Bit-Packing numpy ( SciPY ) 数组可以满足您的需求。该示例显示了打包成 4 个 8 位字节的 4x3 位(布尔)数组。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 是您的最佳选择。

于 2008-10-05T08:16:06.890 回答
4

无需自己创建。

使用非常好的Python 图像库(PIL)

于 2008-10-05T07:11:25.197 回答