2013-11-26 92 views
3

我在Pygame中获得了一些具有透明背景的表面。他们都是一样的大小。但是在它们的每一个上绘制了不同大小的圆,所以圆不完全适合图像。 下面是一些例子图像(我参加了一个截图在Photoshop这样你就可以清楚地看到透明度和图像的大小):删除Pygame中的图像边框

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

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

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

圆表面上改变大小的每一帧,所以我必须每一帧重新计算新的表面。

我已经Google了它,但我还没有找到任何Pygame表面。我也试过制作自己的功能,但看起来很难看,更糟糕:帧率从50(如果我不调用该函数)下降到30 fps(如果我确实调用函数)。我对它进行了一些测试,发现小圆圈比大圆圈需要更长的时间。我怎样才能做到这一点,但速度更快。如果你想我可以显示我所做的功能。

+0

你好!你的问题很难理解。考虑添加一些图像,并构建您的问题流程以提供帮助。 –

+0

我编辑它,现在应该更清楚。 – user2746752

回答

5

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

pixel_rect = image.get_bounding_rect() 

利用该矩形的大小,我们可以创建新的表面:

trimmed_surface = pygame.Surface(pixel_rect.size) 

现在的blit包含在pixel_rectimage部分到trimmed_surface

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

此时,trimmed_surface应该是一个与pixel_rect大小相同的表面,不需要的透明行和co “修剪”离开原始表面。

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