web-dev-qa-db-ja.com

Pygameで画像を画面サイズに拡大縮小する方法

pygameプロジェクトの画像のサイズを画面の解像度に合わせてどのように拡大するかを考えていました。たとえば、当面はウィンドウ表示モードを想定した次のシナリオを想定してください。全画面は同じだと思います:

  • もちろん1600x900ウィンドウにネイティブに表示される1600x900背景画像があります

  • 1280x720ウィンドウでは、明らかにこの画像のrectを1280x720にスケーリングできます

  • ただし、元の300x300 px背景に合うサイズのx,y 1440,860(サイズの例)に1600x900画像を追加する必要がある場合はどうなりますか?もちろん1600x900の場合、画像をネイティブで使用できますが、ウィンドウサイズが小さい/大きい場合はどうでしょうか。

基本的に、ウィンドウサイズに合わせて画像を拡大縮小し、それに応じて画像を配置するにはどうすればよいですか?本当に簡単な自動化された方法があるに違いないと思いますが、今はそれを理解できず、率直に言って検索する時間がありません...

事前に感謝します、Ilmiont

24
Ilmiont

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()
55
unutbu

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_xscale_yintegerに丸められます-この例では0(ゼロ)(Python 2.x)

6
furas