gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:05 24 4
gpt4 key购买 nike

我在 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(如果我调用该函数)。我对其进行了一些测试,发现较小的圆圈比较大的圆圈需要更长的时间来处理。我该怎么做,但速度更快。如果你愿意,我可以展示我制作的功能。

最佳答案

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

pixel_rect = image.get_bounding_rect()

根据这个矩形的大小,我们可以创建一个新的表面:

trimmed_surface = pygame.Surface(pixel_rect.size)

现在 blit 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

关于python - 在 Pygame 中删除图像周围的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com