如何使用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()
慕桂英546537
相关分类