Как создать cairo.ImageSurface с freetype bitmap?

Пытаюсь научиться использовать freetype-py в своём gtk-приложении.

Всё идёт гладко, но когда я пытаюсь вывести face.glyph.bitmap.buffer на экран (я использую gtk.DrawingArea и cairo.ImageSurface):

    ...
    self.face = freetype.Face("/mnt/home/nick/Python/BeeWare/mintfonts/Bytesized-Regular.ttf")
    ...

def on_draw(self, widget, cr):
    ...
    self.face.load_char('a')
    bitmap = self.face.glyph.bitmap
    ...
    cr.set_source_surface(cairo.ImageSurface.create_for_data(bitmap.buffer, cairo.FORMAT_A8, bitmap.width, bitmap.rows, bitmap.pitch), 0, 0)

выходит ошибка:

Traceback (most recent call last):
  File "/mnt/home/nick/Python/Guis/./learn_gtk", line 46, in on_draw
    cr.set_source_surface(cairo.ImageSurface.create_for_data(bitmap.buffer, cairo.FORMAT_A8, bitmap.width, bitmap.rows, bitmap.pitch), 0, 0)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: a bytes-like object is required, not 'list'

Да, странно, питон говорит как будто bytes-like object должен быть первый аргумент в методе cr.set_source_surface, но это не так. Проблема в первом аргументе метода cairo.ImageSurface.create_for_data.

Казалось бы, что сложного! Заменяем bitmap.buffer на bytes(bitmap.buffer)!

Но:

BufferError: Object is not writable.

Здесь я застопорился. Помогите разобраться!


Ответы (0 шт):