2008-10-05 29 views
2

我想在Python中實現一個2d位圖類。該類將具有以下要求:我將如何實現位圖?

  1. 允許創建任意大小的2d位圖。即創建一個8×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

Bit-Packing numpy的(SciPY)陣列做你在找什麼。該示例顯示了4個8位字節的4x3位(布爾)數組。 解壓縮將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是看的地方。