Как бы я реализовал немного карту? - PullRequest
2 голосов
/ 05 октября 2008

Я хочу реализовать 2-битный класс карт в Python. Класс будет иметь следующие требования:

  1. Разрешить создание двухмерных растровых изображений произвольного размера. то есть для создания растрового изображения 8 x 8 (8 байт), что-то вроде:

    bitmap = Bitmap(8,8)
    
  2. предоставляет API для доступа к битам в этой 2-й карте в виде логических или даже целочисленных значений, т. Е .:

    if bitmap[1, 2] or bitmap.get(0, 1)
    
  3. Может извлекать данные как упакованные двоичные данные. По сути, каждая строка битовой карты объединяется и возвращается как двоичные данные. Он может быть дополнен до ближайшего байта или что-то подобное.

    bitmap.data()
    
  4. Уметь создавать новые карты из полученных двоичных данных:

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

Я знаю, что Python может выполнять двоичные операции, но я хотел бы получить несколько советов о том, как лучше всего использовать их для реализации этого класса.

Ответы [ 2 ]

5 голосов
/ 05 октября 2008

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 - это место для поиска.

4 голосов
/ 05 октября 2008

Не нужно создавать это самостоятельно.

Используйте очень хорошую библиотеку изображений Python (PIL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...