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

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

最佳答案

表面对象有一个名为 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/

相关文章:

python - Tensorflow 1.13 中出现 "NameError: name ' Reduction' is not Defined”错误

mysql - 与其他实体有随机关系的实体

java - Mac JVM渲染JTabbedPane 1.6及以上版本差异

objective-c - 为什么边框粗细会随着按钮的颜色而变化(蓝色边框为 2px)?

html - 使用 CSS 扩展边框

python - Pandas 什么时候输出系列与数据框?

python - 分组并减去 Pandas 中的列

python - 使用 Cholesky 分解在 numpy 中反转矩阵的效率

arrays - 循环范围与循环数组之间的性能差异

javascript - 如何让下面的jquery代码更加高效