How to scale images to screen size in Pygame

后端 未结 2 1901
无人及你
无人及你 2020-12-24 06:15

I was wondering how I would go about scaling the size of images in pygame projects to the resolution of the screen. For example, envisage the following scenario

相关标签:
2条回答
  • 2020-12-24 06:37

    You can scale the image with pygame.transform.scale:

    import pygame
    picture = pygame.image.load(filename)
    picture = pygame.transform.scale(picture, (1280, 720))
    

    You can then get the bounding rectangle of picture with

    rect = picture.get_rect()
    

    and move the picture with

    rect = rect.move((x, y))
    screen.blit(picture, rect)
    

    where screen was set with something like

    screen = pygame.display.set_mode((1600, 900))
    

    To allow your widgets to adjust to various screen sizes, you could make the display resizable:

    import os
    import pygame
    from pygame.locals import *
    
    pygame.init()
    screen = pygame.display.set_mode((500, 500), HWSURFACE | DOUBLEBUF | RESIZABLE)
    pic = pygame.image.load("image.png")
    screen.blit(pygame.transform.scale(pic, (500, 500)), (0, 0))
    pygame.display.flip()
    while True:
        pygame.event.pump()
        event = pygame.event.wait()
        if event.type == QUIT:
            pygame.display.quit()
        elif event.type == VIDEORESIZE:
            screen = pygame.display.set_mode(
                event.dict['size'], HWSURFACE | DOUBLEBUF | RESIZABLE)
            screen.blit(pygame.transform.scale(pic, event.dict['size']), (0, 0))
            pygame.display.flip()
    
    0 讨论(0)
  • 2020-12-24 06:49

    If you scale 1600x900 to 1280x720 you have

    scale_x = 1280.0/1600
    scale_y = 720.0/900
    

    Then you can use it to find button size, and button position

    button_width  = 300 * scale_x
    button_height = 300 * scale_y
    
    button_x = 1440 * scale_x
    button_y = 860  * scale_y
    

    If you scale 1280x720 to 1600x900 you have

    scale_x = 1600.0/1280
    scale_y = 900.0/720
    

    and rest is the same.


    I add .0 to value to make float - otherwise scale_x, scale_y will be rounded to integer - in this example to 0 (zero) (Python 2.x)

    0 讨论(0)
提交回复
热议问题