2013-11-15 3 views
16

pygame 프로젝트의 이미지 크기를 화면 해상도로 조정하는 방법에 대해 궁금합니다. 예를 들어, 창 디스플레이 모드를 당분간 가정하면 다음 시나리오를 상상해보십시오. 나는 전체 화면은 동일합니다 가정 파이 게임에서 화면 크기로 이미지 크기를 조정하는 방법

  • 가 나는 1280x720 창에서

  • 내가 분명히 바로이 이미지 '하는 구형을 확장 할 수있는 1600x900 창에서 기본적 물론 디스플레이의 1600x900 배경 이미지를 가지고 내가 추가 할 필요하면 어떻게됩니까 1280x720

  • 그러나, 원래 1600x900 배경에 맞게 크기가 조정됩니다 x,y 1440,860 (예를 들어, 크기)에서 300x300 px 이미지라고? 물론 1600x900의 경우 이미지를 기본적으로 사용할 수 있지만 더 작거나 큰 창 크기는 어떻게됩니까?

기본적으로 이미지를 창 크기로 축척하고 그에 따라 위치를 조정하려면 어떻게해야합니까? ... 사전에

감사합니다, Ilmiont

답변

38

당신을 나는 정말 쉽게 자동화 된 방법이 있어야한다 생각하지만 지금 나는 그것을 알아낼 수 솔직히 그것을 검색 할 시간이 없어 pygame.transform.scale으로 이미지를 확장 할 수있는 것은 :

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

당신은 다음과 picture의 경계 사각형을 얻을 수

rect = picture.get_rect() 

screen이 위젯은 다양한 화면 크기에 적응 할 수 있도록하려면

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

같은 것을 사용해 설정된

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

과 함께 사진을 이동, 당신이 할 수 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

확인을 나는 그것을 얻을 수 있지만 경우에 배경 이미지의 크기가 1600x900에서 1280x720으로 조정되었고 300x300에서 1280x720-1600x900에 이르기까지 버튼에 대한 이미지가 표시되면 어떻게하면 버튼을 작은 창에 배치해야하는지 알 수 있습니까? 1280x720 디스플레이에서 말하는 600 픽셀은 분명히 1280x900 화면보다 많기 때문에 상대적으로 말하기 쉽습니다. – Ilmiont

+0

다른 가로 세로 비율로 조정하는 방법을 의미합니까? 종횡비 자체를 계산하고 모든 크기 값에 인수를 곱해야합니다. – cprn

7

1600x900을 128로 축척하면 0x720 당신은

당신이

scale_x = 1600.0/1280 
scale_y = 900.0/720 

이 1280 * 720 화면 1600x900에 확장 할 경우

button_width = 300 * scale_x 
button_height = 300 * scale_y 

button_x = 1440 * scale_x 
button_y = 860 * scale_y 

하고 나머지는 동일

scale_x = 1280.0/1600 
scale_y = 720.0/900 
당신은 버튼 크기를 찾기 위해 사용할 수있는 것보다

, 버튼 위치가 .


나는 float를 만들기 위해 값 .0를 추가 - 그렇지 않으면 scale_x, scale_yinteger로 반올림됩니다 -이 예에서 0 (영) (파이썬 2.x에서)

+0

pygame.transform.scale을 사용하지 않는 이유가 무엇입니까? –

관련 문제