删除Pygame中图像周围的边框

时间:2013-11-26 14:35:14

标签: python performance border pygame

我在Pygame中有一些透明背景的表面。它们的大小都一样。但是每个圆上都绘制了一个不同大小的圆圈,因此圆圈并不完全适合图像。 下面是一些示例图像(我在Photoshop中截取了截图,因此您可以清楚地看到图像的透明度和大小):

enter image description here enter image description here enter image description here

现在我想删除图像周围的透明边框,使圆圈完全适合图像。我不希望表面呈圆形,我不认为这是可能的,但我希望表面左侧和右侧没有空白列,顶部没有空白行和底部。想要的结果:

enter image description here enter image description here enter image description here

曲面上的圆圈每帧都会改变大小,因此我必须每帧重新计算新曲面。

我已经谷歌了,但我还没有找到任何关于Pygame表面的东西。我也尝试制作自己的功能,但它看起来很丑陋而且更糟糕:帧速率从50(如果我不调用函数)下降到30 fps(如果我调用该函数)。我测试了一下,我发现较小的圆圈比较大的圆圈需要更长的时间来处理。我怎么能这样做,但速度更快。如果你愿意,我可以展示我所做的功能。

1 个答案:

答案 0 :(得分:5)

表面对象有一个名为get_bounding_rect的方法,我们将从这里开始。该函数返回包含曲面上所有非透明像素的最小rect。

pixel_rect = image.get_bounding_rect()

使用此rect的大小,我们可以创建一个新表面:

trimmed_surface = pygame.Surface(pixel_rect.size)

现在将image中包含的pixel_rect部分点击到trimmed_surface上:

trimmed_surface.blit(image, (0,0), pixel_rect)

此时,trimmed_surface应该是与pixel_rect大小相同的表面,不需要的透明行和列会从原始曲面“修剪”。

Surface.get_bounding_rect的文档:http://www.pygame.org/docs/ref/surface.html#Surface.get_bounding_rect