Формы сглаживания в Pygame

Я использую Pygame для рисования некоторых вещей. Проблема в том, что у них много сглаженных ребер:

Aliased concentric circles

Я хочу сделать их более мягкими, например:

Smooth concentric circles


Моя идея до сих пор заключалась в том, чтобы нарисовать фигуру в двойном размере, а затем использовать

pygame.transform.smoothscale(surf, (w/2, h/2))

чтобы уменьшить размер до требуемого размера.

К сожалению, если я рисую свои фигуры на прозрачной поверхности, плавный кружок поворачивает края, которые касаются прозрачных пикселей черного цвета.

  • Как сгладить изображение без преобразования альфа-прозрачных пикселей в черный цвет или
  • Как еще я вижу края сглаживания?

Ответ 1

Чтобы нарисовать сглаженные заполненные фигуры с pygame, используйте модуль gfxdraw и нарисуйте одну регулярную заполненную фигуру и один сглаженный контур. Из http://www.pygame.org/docs/ref/gfxdraw.html:

"Чтобы нарисовать сглаженную и заполненную форму, сначала используйте версию функции aa *, а затем используйте заполненную версию."

Обратите внимание, что вам нужно явно импортировать gfxdraw, т.е. from pygame import gfxdraw.