在Pygame中删除图像周围的边框

用户名

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

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

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

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

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

我已经用Google搜索了它,但是还没有找到适用于Pygame曲面的任何东西。我也尝试制作自己的函数,但是看起来很丑陋,而且更糟:帧速率从50(如果我不调用该函数)下降到30 fps(如果我确实调用了该函数)。我对其进行了一点测试,发现较小的圆圈比较大的圆圈需要更长的处理时间。我该怎么做,但是更快。如果您愿意,我可以展示我所做的功能。

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

pixel_rect = image.get_bounding_rect()

有了这个矩形的大小,我们可以创建一个新的曲面:

trimmed_surface = pygame.Surface(pixel_rect.size)

现在将其中image包含的部分blitpixel_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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章