如何在 Pygame 中缩放图像同时保持纵横比?

如何使用pygame.transform.scale但保持相同的纵横比重新缩放图像?就像我有一张 16:9 的图像,我想在保持相同比例的情况下对其进行缩放。我的主要目标是制作一个图像查看器,因为 Windows 10 需要很长时间才能加载,这是我当前的代码:


import pygame

from sys import argv

from win32api import GetSystemMetrics

pygame.init()

pygame.display.init()


width=GetSystemMetrics(0)*0.9   #Window size a bit smaller than monoitor size

height=GetSystemMetrics(1)*0.8

img=pygame.image.load(argv[-1]) #Get image file opened with it


img=pygame.transform.scale(img, (int(width), int(height)))  #Scales image to window size

Main=pygame.display.set_mode((int(width), int(height)))

pygame.display.set_caption(str(argv[-1].split("\\")[-1]))   #Set window title as filename

imgrect=img.get_rect()


Main.blit(img, imgrect)

pygame.display.update()

while True:

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            pygame.quit()

            exit()

我想问题是我可以调整它的大小,但图像扭曲,或者我可以将其显示为图像的宽度和高度,但我无法将图像缩放到窗口尺寸中的大小,同时保持纵横比,总是有空格。抱歉,我的问题很模糊,我不知道如何解释。


编辑:已修复。如果其他人也有同样的问题,我必须标准化比例,通过将两侧除以宽度将其变为 1:something。然后,我将 1:something 的比率乘以窗口的宽度,并在 while 循环中,如果图像的宽度大于窗口的宽度,则减小比例。来源:


import pygame

from sys import argv

from win32api import GetSystemMetrics

pygame.init()

pygame.display.init()


windowwidth=GetSystemMetrics(0)*0.9

windowheight=GetSystemMetrics(1)*0.8

Main=pygame.display.set_mode((int(windowwidth), int(windowheight)))

img=pygame.image.load(argv[-1])


imgratiox=int(1)

imgratioy=int(img.get_height()/img.get_width())


imgwindowwidth=int(windowwidth)

imgwindowheight=int(round(img.get_height()/img.get_width(), 2)*windowwidth)

scale=1

while imgwindowheight>windowheight:

    imgwindowheight*=scale

    imgwindowwidth*=scale

    scale-=0.05


img=pygame.transform.scale(img, (int(imgwindowwidth), int(imgwindowheight)))

pygame.display.set_caption(str(argv[-1].split("\\")[-1])+ "    Img width:"+str(img.get_width())+"    Img height:"+str(img.get_height()))

imgrect=img.get_rect()


Main.blit(img, imgrect)

pygame.display.update()

while True:

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            pygame.quit()

            exit()


梵蒂冈之花
浏览 117回答 1
1回答

慕桂英546537

加载图像时,调整窗口以匹配图像比例。在此代码中,设置宽度,然后根据图像比例调整高度。如果高度太大,则减小宽度以允许更小的高度。import pygamefrom sys import argvfrom win32api import GetSystemMetricspygame.init()pygame.display.init()img=pygame.image.load(argv[-1]) #Get image file opened with itwidth=GetSystemMetrics(0)*0.9   #Window size a bit smaller than monoitor sizeheight=width*img.get_height()/img.get_width()  # keep ratioif height > GetSystemMetrics(1)*0.8:  # too tall for screen    width = width * (GetSystemMetrics(1)*0.8)/height  # reduce width to keep ratio     height = GetSystemMetrics(1)*0.8  # max heightimg=pygame.transform.scale(img, (int(width), int(height)))  #Scales image to window sizeMain=pygame.display.set_mode((int(width), int(height)))pygame.display.set_caption(str(argv[-1].split("\\")[-1]))   #Set window title as filenameimgrect=img.get_rect()Main.blit(img, imgrect)pygame.display.update()while True:    for event in pygame.event.get():        if event.type==pygame.QUIT:            pygame.quit()            exit()测试输出原来的脚本
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python