Pygame 绘制大图像时 fps 非常低
Pygame very low fps when drawing large image
我正在编写某种图片查看器,用户可以在其中使用相机 pan/zoom 图片。
用户需要能够放大很多才能看到高分辨率图像的细节。
当图像相对于应用程序大小时 window,我得到大约 300 fps,图像越小,fps 越高。但是,当我放大图像几乎填满应用程序时 window,fps 下降到不到 10fps ...
我的图像是相当高分辨率的 PNG(大部分大约为 2000x1000),但我尝试使用较小的图像,但我遇到了同样的性能问题
我已经搜索了很多解决这个问题的方法,但找不到任何有用的东西。
我已经在使用“convert()
”函数(更准确地说是“convert_alpha()
”函数)
我使用 pygame.transform.scale
重新缩放图像以模拟相机缩放。这是我的 set_scale()
函数:
def set_scale(self, factor):
self.original_rect_size *= factor
self.rect.size = self.original_rect_size
self.image = pygame.transform.scale(self.original_im, Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor))
self.rect.size = Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor)
我用pygame.sprite.LayeredUpdates()
对所有图片进行分组绘制
有什么方法可以提高性能吗?我可能做错了什么,因为我是 pygame.
的新手
非常感谢!
pygame.transform.scale
是一个非常昂贵的操作。仅在比例因子变化时缩放图像:
class YouClass:
def __init__(self):
# [...]
self.factor = 1
def set_scale(self, factor):
if factor != self.factor:
self.factor = factor
self.original_rect_size *= factor
self.rect.size = self.original_rect_size
self.image = pygame.transform.scale(self.original_im, Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor))
self.rect.size = Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor)
我正在编写某种图片查看器,用户可以在其中使用相机 pan/zoom 图片。
用户需要能够放大很多才能看到高分辨率图像的细节。
当图像相对于应用程序大小时 window,我得到大约 300 fps,图像越小,fps 越高。但是,当我放大图像几乎填满应用程序时 window,fps 下降到不到 10fps ...
我的图像是相当高分辨率的 PNG(大部分大约为 2000x1000),但我尝试使用较小的图像,但我遇到了同样的性能问题
我已经搜索了很多解决这个问题的方法,但找不到任何有用的东西。
我已经在使用“convert()
”函数(更准确地说是“convert_alpha()
”函数)
我使用 pygame.transform.scale
重新缩放图像以模拟相机缩放。这是我的 set_scale()
函数:
def set_scale(self, factor):
self.original_rect_size *= factor
self.rect.size = self.original_rect_size
self.image = pygame.transform.scale(self.original_im, Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor))
self.rect.size = Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor)
我用pygame.sprite.LayeredUpdates()
对所有图片进行分组绘制
有什么方法可以提高性能吗?我可能做错了什么,因为我是 pygame.
的新手非常感谢!
pygame.transform.scale
是一个非常昂贵的操作。仅在比例因子变化时缩放图像:
class YouClass:
def __init__(self):
# [...]
self.factor = 1
def set_scale(self, factor):
if factor != self.factor:
self.factor = factor
self.original_rect_size *= factor
self.rect.size = self.original_rect_size
self.image = pygame.transform.scale(self.original_im, Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor))
self.rect.size = Vector2(self.original_rect_size.x*factor, self.original_rect_size.y*factor)