【问题标题】:Antialiasing shapes in PygamePygame 中的形状抗锯齿
【发布时间】:2014-07-14 05:04:45
【问题描述】:

我正在使用 Pygame 绘制一些东西。问题是它们有很多锯齿边缘:

我想让它们更柔软,像这样:


到目前为止,我的想法是绘制双倍大小的形状,然后使用

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

把它缩小到我想要的大小。

不幸的是,如果我在透明表面上绘制形状,平滑刻度会将接触透明像素的边缘变为黑色!

  • 如何在不将 Alpha 透明像素变为黑色的情况下平滑缩放图片,或者
  • 我还能如何对边缘进行抗锯齿处理?

【问题讨论】:

  • 请运行样本。
  • 我已经有一段时间没有使用 Pygame 了,或者根本没有使用太多,但是是否有可能制作一个包含它应该位于顶部的背景部分的新图像,按比例放大, 叠加精灵,然后收缩和 blit that?
  • 有一种绘制抗锯齿圆的方法(pygame.org/docs/ref/gfxdraw.html)。你能用它在你的实心圆圈周围画一个圆圈吗?
  • 我的形状不是圆形... johncip 有一个非常好的主意,但如果可能的话,我更喜欢一种不包括取地下、加倍大小并再次缩小的方法(这需要更多时间)但现在我会使用它!谢谢
  • @superGeek 如果 johncip 的想法可行,那就太好了。此外,仅供参考,我发布的链接还有其他抗锯齿形状(椭圆、三角形和多边形)。

标签: python pygame antialiasing


【解决方案1】:

要使用 pygame 绘制抗锯齿填充形状,请使用模块 gfxdraw 并绘制一个抗锯齿轮廓和一个规则填充形状。

来自https://www.pygame.org/docs/ref/gfxdraw.html

要绘制抗锯齿和填充形状,首先使用 aa* 版本的
函数,然后使用填充版本。

请注意,您需要显式导入gfxdraw,即from pygame import gfxdraw

【讨论】:

  • 谢谢!问题是我需要一个椭圆的一半。我想现在我只画整个椭圆并使用它的一半......
【解决方案2】:

这里是 andreasdr 答案的实用解决方案。

import pygame
from pygame import gfxdraw

def draw_circle(surface, x, y, radius, color):
    gfxdraw.aacircle(surface, x, y, radius, color)
    gfxdraw.filled_circle(surface, x, y, radius, color)

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2015-08-15
    相关资源
    最近更新 更多