有没有办法可以截取我的pygame窗口的右半部分?
我正在使用pygame制作游戏,我需要拍摄屏幕的快照,而不是整个屏幕,只是右半部分。
我知道:
pygame.image.save(screen,"screenshot.jpg")
但这将包括图像中的整个屏幕。
有没有办法可以截取我的pygame窗口的右半部分?
也许通过某种方式更改它包含的区域?我用Google搜索了但是找不到任何我想的东西也许我可以使用PIL裁剪它,但这似乎是很多额外的工作。
如果不可能,有人能告诉我最容易裁剪整个画面的方法吗?
答案 0 :(得分:10)
如果您始终希望屏幕截图与屏幕的位置相同,则可以使用subsurface
。
http://www.pygame.org/docs/ref/surface.html#pygame.Surface.subsurface
rect = pygame.Rect(25, 25, 100, 50)
sub = screen.subsurface(rect)
pygame.image.save(sub, "screenshot.jpg")
subsurface
在这种情况下效果很好,因为父表面的任何更改(本例中为screen
)也会应用于地下。
如果你想能够指定屏幕的任意部分来截取屏幕(因此,每次都不是相同的矩形),那么创建一个新的表面可能会更好,然后将所需的部分插入屏幕到那个表面,然后保存。
rect = pygame.Rect(25, 25, 100, 50)
screenshot = pygame.Surface(100, 50)
screenshot.blit(screen, area=rect)
pygame.image.save(screenshot, "screenshot.jpg")
答案 1 :(得分:0)
这在使用Python 3.7.4的系统上不完全有效。这是一个可行的版本:
rect = pygame.Rect(25, 25, 100, 50)
sub = screen.subsurface(rect)
screenshot = pygame.Surface((100, 50))
screenshot.blit(sub, (0,0))
pygame.image.save(screenshot, "screenshot.jpg")
答案 2 :(得分:0)
import pygame
import sys
screen = pygame.display.set_mode((400, 500))
clock = pygame.time.Clock()
def grab(x, y, w, h):
"Grab a part of the screen"
# get the dimension of the surface
rect = pygame.Rect(x, y, w, h)
# copy the part of the screen
sub = screen.subsurface(rect)
# create another surface with dimensions
# This is done to unlock the screen surface
screenshot = pygame.Surface((w, h))
screenshot.blit(sub, (0, 0))
return screenshot
def blit(part, x, y):
screen.blit(part, (x, y))
def quit():
pygame.quit()
sys.exit()
def start():
# shows half the screen
blit(back, 0, 0)
# and the other half copied
sub = grab(50, 0, 75, 250)
blit(sub, 200, 0)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
quit()
pygame.display.update()
clock.tick(60)
back = pygame.image.load("img\\back.png")
start()
答案 3 :(得分:-1)
我会做类似的事情:
example = pygame.Surface(screen.get_width()/2, 0)
然后稍后当你想拍摄截图时:
pygame.image.save(example, "example.jpg")