Как создать 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.
Здесь я застопорился. Помогите разобраться!