如何将 pygame 场景保存为 jpeg?
How to save pygame scene as jpeg?
我需要做以下事情。我使用 OBJFileLoader 加载了一个 obj 模型并将其渲染为 window。如何将渲染的场景保存为图片?
是否可以在不显示 window 的情况下执行此操作?
你可以保存一个pygame.Surface
object, object as the Surface associated with the screen with pygame.image.save()
:
This will save your Surface as either a BMP, TGA, PNG, or JPEG image.
screen = pygame.display.set_mode((w, h))
# [...]
pygame.image.save(screen , "screenshot.jpg")
但是,这不适用于 pygame.OPENGL
表面。您必须使用 glReadPixels
before the display is updated (before pygame.display.flip()
or pygame.display.update()
). Use pygame.image.fromstring()
读取帧缓冲区才能从缓冲区创建新的 Surfaces。最后,将 Surface 保存到文件中:
screen = pygame.display.set_mode((w, h), pygame.DOUBLEBUF | pygame.OPENGL)
# [...]
size = screen.get_size()
buffer = glReadPixels(0, 0, *size, GL_RGBA, GL_UNSIGNED_BYTE)
pygame.display.flip()
screen_surf = pygame.image.fromstring(buffer, size, "RGBA")
pygame.image.save(screen_surf, "screenshot.jpg")
我需要做以下事情。我使用 OBJFileLoader 加载了一个 obj 模型并将其渲染为 window。如何将渲染的场景保存为图片? 是否可以在不显示 window 的情况下执行此操作?
你可以保存一个pygame.Surface
object, object as the Surface associated with the screen with pygame.image.save()
:
This will save your Surface as either a BMP, TGA, PNG, or JPEG image.
screen = pygame.display.set_mode((w, h))
# [...]
pygame.image.save(screen , "screenshot.jpg")
但是,这不适用于 pygame.OPENGL
表面。您必须使用 glReadPixels
before the display is updated (before pygame.display.flip()
or pygame.display.update()
). Use pygame.image.fromstring()
读取帧缓冲区才能从缓冲区创建新的 Surfaces。最后,将 Surface 保存到文件中:
screen = pygame.display.set_mode((w, h), pygame.DOUBLEBUF | pygame.OPENGL)
# [...]
size = screen.get_size()
buffer = glReadPixels(0, 0, *size, GL_RGBA, GL_UNSIGNED_BYTE)
pygame.display.flip()
screen_surf = pygame.image.fromstring(buffer, size, "RGBA")
pygame.image.save(screen_surf, "screenshot.jpg")