4

Python で 2D ビット マップ クラスを実装したいと考えています。クラスには次の要件があります。

  1. 任意のサイズの 2D ビットマップの作成を許可します。つまり、次のような 8 x 8 ビットマップ (8 バイト) を作成します。

    bitmap = Bitmap(8,8)
    
  2. この 2 次元マップのビットにブール値または整数値としてアクセスするための API を提供します。

    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

ビットパッキング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

これを自分で作成する必要はありません。

非常に優れたPythonImagingLibrary(PIL)を使用する

于 2008-10-05T07:11:25.197 に答える