我该如何实现位图?

时间:2008-10-05 04:51:12

标签: python class

我希望在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())
    
  5. 我知道Python能够执行二进制操作,但我想知道如何最好地使用它们来实现这个类。

2 个答案:

答案 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)