Из-за проблем с производительностью пришлось выбросить из проекта эту библиотеку. Теперь для отображения количества точек используется заранее сгенерированный spritesheet, в котором иконки с надписями. И скорость работы повысилась, и ушёл один плавающий баг. В общем, чем проще, тем лучше.
А spritesheet сгенерировал скриптом на питоне, который выглядит примерно так:
import math from os import path from PIL import ImageFont, Image, ImageDraw def here(*pathchunks): return path.abspath(path.join(path.dirname(__file__), *pathchunks)) def spritesheet(image, labels, columns): original_width, original_height = image.size font_name = '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf' font = ImageFont.truetype(font_name, 10) sheet_items = [] for label in labels: item_image = image.copy() item_draw = ImageDraw.Draw(item_image) _, text_height = item_draw.textsize(label) text_width, _ = font.getsize(label) item_draw.text( ((original_width - text_width) / 2, (original_height - text_height) / 2), label, (255, 255, 255), font=font) sheet_items.append(item_image) sheet_width = original_width * columns lines = int(math.ceil(len(labels) / float(columns))) sheet_height = original_height * lines sheet = Image.new(mode='RGBA', size=(sheet_width, sheet_height), color=(0, 0, 0, 0)) for number, item_image in enumerate(sheet_items): x = number % columns y = int(number / columns) sheet.paste(item_image, (x * original_width, y * original_height)) sheet.save(here('sheet.png'), 'PNG') if __name__ == '__main__': spritesheet( Image.open(here('image.png')), [str(i) for i in range(25)], 10 )