Как масштабировать изображения до размера экрана в Pygame
Мне было интересно, как бы я решил масштабировать размер изображений в проектах pygame
до разрешения экрана. Например, предусмотрите следующий сценарий, предполагающий оконный режим отображения на данный момент; Я предполагаю, что полный экран будет таким же:
-
У меня есть фоновое изображение 1600x900
, которое, конечно, отображается изначально в окне 1600x900
-
В окне 1280x720
я могу, очевидно, просто масштабировать эти образы "rect" до 1280x720
-
Что произойдет, однако, если мне нужно добавить, скажите 300x300 px
изображение в x,y 1440,860
(размеры примера), размер которого соответствует исходному фону 1600x900
? Конечно, для 1600x900
я могу, конечно, использовать изображение изначально, но как насчет размеров меньшего/большего размера?
В принципе, как мне масштабировать изображения до размера окна, а затем размещать их соответственно? Я предполагаю, что должен быть ДЕЙСТВИТЕЛЬНО простой автоматизированный метод, но прямо сейчас я не могу понять это и, честно говоря, не успел его найти...
Спасибо заранее,
Ilmiont
Ответы
Ответ 1
Вы можете масштабировать изображение с помощью pygame.transform.scale
:
import pygame
picture = pygame.image.load(filename)
picture = pygame.transform.scale(picture, (1280, 720))
Затем вы можете получить ограничивающий прямоугольник picture
с помощью
rect = picture.get_rect()
и переместите изображение с помощью
rect = rect.move((x, y))
screen.blit(picture, rect)
где screen
был установлен с чем-то вроде
screen = pygame.display.set_mode((1600, 900))
Чтобы позволить вашим виджетам настраиваться на различные размеры экрана,
вы можете сделать отображение
изменяемый:
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()
Ответ 2
Если вы масштабируете 1600x900 до 1280x720, у вас есть
scale_x = 1280.0/1600
scale_y = 720.0/900
Чем вы можете использовать его, чтобы найти размер кнопки и положение кнопки
button_width = 300 * scale_x
button_height = 300 * scale_y
button_x = 1440 * scale_x
button_y = 860 * scale_y
Если вы масштабируете 1280x720 до 1600x900, у вас есть
scale_x = 1600.0/1280
scale_y = 900.0/720
и остальное то же самое.
Я добавляю .0
в значение float
- иначе scale_x
, scale_y
будет округлено до integer
- в этом примере до 0
(ноль) (Python 2.x)