2013-11-15 659 views
16

我想知道如何將pygame項目中的圖像大小縮放到屏幕分辨率。例如,設想下面的場景假設暫時爲窗口顯示模式;我想全屏幕將是相同的:如何在Pygame中將圖像縮放到屏幕大小

  • 我有一個1600x900背景圖像這當然顯示本地在1600x900窗口

  • 1280x720窗口,我可以明明只是擴展這個圖片矩形到1280x720

  • 會發生什麼,但是如果我需要補充,說在x,y 1440,860(例如大小)一個300x300 px圖像,其尺寸正好與原來1600x900背景是什麼?當然,對於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() 

和移動與

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

的圖片,其中screen設置的東西,如

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

爲了讓您的小部件,以適應不同的屏幕尺寸, 你可以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

OK我得到的,但如果背景圖像縮放比例從1600x900到1280x720,以及一個圖像從300x300到相對於1280x720-1600x900的某個按鈕,然後我該如何計算按鈕應放置在較小窗口上的位置?因爲在1280x720顯示器上明顯低於600像素比在1280x900屏幕上多,相對而言。 – Ilmiont

+0

您的意思是如何針對不同的長寬比調整它?您必須自己計算縱橫比,並將每個尺寸值乘以其係數。 – cprn

7

如果您將1600x900縮放到128 0x720你有

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 

如果您縮放1280×720到1600×900,你有

scale_x = 1600.0/1280 
scale_y = 900.0/720 

和休息是相同的。


我添加.0價值,使float - 否則scale_xscale_y將四捨五入至integer - 在這個例子中0(零)(Python的2.X)

+0

是否有任何理由不使用pygame.transform.scale? –