如何截取整个显示的屏幕截图 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))
我正在创建一个绘图软件,希望用户在完成创建后能够保存他们的图像,所以我尝试了 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))