【问题标题】:How to save pygame scene as jpeg?如何将pygame场景保存为jpeg?
【发布时间】:2021-02-15 13:56:29
【问题描述】:

我需要执行以下操作。我使用OBJFileLoader 加载了一个obj 模型并将其渲染到一个窗口中。如何将渲染的场景保存为图片? 是否可以在不显示窗口的情况下执行此操作?

【问题讨论】:

    标签: python opengl pygame pyopengl pygame-surface


    【解决方案1】:

    你可以保存一个pygame.Surface对象,对象作为与pygame.image.save()屏幕关联的Surface

    这会将您的 Surface 保存为 BMP、TGA、PNG 或 JPEG 图像。

    screen = pygame.display.set_mode((w, h))
    
    # [...]
    
    pygame.image.save(screen , "screenshot.jpg")
    

    但是,这不适用于pygame.OPENGL Surfaces。在更新显示之前(在pygame.display.flip()pygame.display.update() 之前),您必须使用glReadPixels 读取帧缓冲区。使用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")
    

    【讨论】:

    • 是否有可能以某种方式隐藏窗口使其不显示?
    • @SomVolodya 请参阅pygame.displaypygame.HIDDEN 窗口以隐藏模式打开” 例如:pygame.display.set_mode((w, h), pygame.DOUBLEBUF | pygame.OPENGL | pygame.HIDDEN)(自 Pygame 版本 2.0 起)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2013-06-09
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多