How to take screenshot of certain part of screen in Pygame

后端 未结 4 1394
感动是毒
感动是毒 2021-01-04 23:26

Is there a way I can take a screenshot of the right half of my pygame window?

I\'m making a game using pygame and I need to take a snapshot of the screen but not the

相关标签:
4条回答
  • 2021-01-05 00:06

    If you always want the screenshot to be of the same portion of the screen, you could use the 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")
    

    The subsurface would work well in this scenario because any changes to the parent surface (screen in this case) will be applied to the subsurface as well.

    If you want to be able to specify an arbitrary portion of the screen to take a screenshot of (so, not the same rectangle every time) then it would probably be better to create a new surface, blit the desired portion of the screen to that surface, and then save it.

    rect = pygame.Rect(25, 25, 100, 50)
    screenshot = pygame.Surface(100, 50)
    screenshot.blit(screen, area=rect)
    pygame.image.save(screenshot, "screenshot.jpg")
    
    0 讨论(0)
  • 2021-01-05 00:11

    This didn't exactly work on my system with Python 3.7.4. Here is a version which worked:

    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")
    
    0 讨论(0)
  • 2021-01-05 00:12

    I would do something like:

    example = pygame.Surface(screen.get_width()/2, 0)

    Then later on when you want to take the screenshot do:

    pygame.image.save(example, "example.jpg")

    0 讨论(0)
  • 2021-01-05 00:26
    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()
    
    0 讨论(0)
提交回复
热议问题