我在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] 删除。
我来说两句