2008-10-05 5 views
2

Je souhaite implémenter une classe de mappage 2d bit en Python. La classe doit avoir les exigences suivantes:Comment pourrais-je implémenter une carte de bits?

  1. Permet la création de bitmaps 2d de taille arbitraire. à savoir pour créer un 8 x 8 bitmap (8 octets), quelque chose comme:

    bitmap = Bitmap(8,8) 
    
  2. fournir une API pour accéder aux bits de cette carte 2D en tant que valeurs booléennes ou même entières, à savoir:

    if bitmap[1, 2] or bitmap.get(0, 1) 
    
  3. Capable de récupérer les données en tant que données binaires compressées. Essentiellement, ce serait chaque ligne de la carte de bits concaténée et retournée en tant que données binaires. Il peut être rembourré à l'octet le plus proche ou quelque chose de similaire.

    bitmap.data() 
    
  4. capable de créer de nouvelles cartes à partir des données binaires récupérées:

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

Je sais que Python est capable d'effectuer des opérations binaires, mais je voudrais quelques suggestions quant à la meilleure pour les utiliser pour implémenter cette classe.

Répondre

4

Bit-Packing de numpy (SciPY) fait ce que vous recherchez. L'exemple montre une matrice 4x3 bits (booléenne) compressée en 4 octets de 8 bits. Unpackbits décompresse les tableaux uint8 en un tableau de sortie booléen que vous pouvez utiliser dans les calculs.

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

Si vous avez besoin d'images de pixel à 1 bit, PIL est l'endroit à rechercher.

Questions connexes