如何截取整个显示的屏幕截图 pygame

How to take screenshot of entire display pygame

我正在创建一个绘图软件,希望用户在完成创建后能够保存他们的图像,所以我尝试了 pygame.image.save(pygame.display.get_surface(), "/home/user/screenshot.png")。我快速画了一幅画,然后按下了我设置的保存图像的键。我查看图像,它只保存了空白显示表面,而不是实际绘图的 pygame.draw.rect()s。我查看了以下链接:How to capture pygame screen? https://gamedev.stackexchange.com/questions/118372/how-can-i-take-a-screenshot-of-a-certain-part-of-the-screen-in-pygame Can python get the screen shot of a specific window? 等等。我如何将整个显示屏的屏幕截图连同绘图一起截取?这是我的主循环:

running = True
while running:
    updateWindow() # Updates window
    clearWindow() # Clears window
    checkEvents() # Checks events
    redrawItems() # Redraws your drawing
    pygame.event.pump()
pygame.display.quit()
pygame.quit()

在显示表面上尝试pygame.Surface.copy。请参阅文档 here.

因此,如果 display 是您的屏幕,那么:

screencopy = display.copy()

应该给您一份 screencopy 中的显示图像。请记住,由于双缓冲,如果您当时执行了 display.update(),它会为您提供屏幕上显示的内容的副本,这可能与您未执行操作时屏幕上显示的内容不同尚未被 update().

推到屏幕上

您可以使用 pygame.image.save(Surface, filename) 执行此操作,您可以阅读更多有关 here

下面是一个简单的函数,可以将显示的一部分保存为图像。

def Capture(display,name,pos,size): # (pygame Surface, String, tuple, tuple)
    image = pygame.Surface(size)  # Create image surface
    image.blit(display,(0,0),(pos,size))  # Blit portion of the display to the image
    pygame.image.save(image,name)  # Save the image to the disk**

此函数的作用是创建一个名为图像的 pygame 表面。然后区域 (pos,size) 在其原点被 blit 成图像。最后,将调用 pygame.image.save(Surface, filename) 并将图像保存到磁盘。

例如,如果我们要在显示器上的 pos 50x50 处保存一个名为“Capture.png”的 100x100 图像,name 将等于“Capture.png”,pos 将等于 (50,50 ),大小等于 (100,100),函数调用如下所示:

Capture(display,"Capture.png",(50,50),(100,100))