为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2023-12-12 20:40:01
如何使用pygame.transform.scale但保持相同的纵横比重新缩放图像?就像我有一张 16:9 的图像,我想在保持相同比例的情况下对其进行缩放。我的主要目标是制作一个图像查看器,因为 Windows 10 需要很长时间才能加载,这是我当前的代码:import pygamefrom sys import argvfrom win32api import GetSystemMetricspygame.init()pygame.display.init()width=GetSystemMetrics(0)*0.9   #Window size a bit smaller than monoitor sizeheight=GetSystemMetrics(1)*0.8img=pygame.image.load(argv[-1]) #Get image file opened with itimg=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()我想问题是我可以调整它的大小,但图像扭曲,或者我可以将其显示为图像的宽度和高度,但我无法将图像缩放到窗口尺寸中的大小,同时保持纵横比,总是有空格。抱歉,我的问题很模糊,我不知道如何解释。编辑:已修复。如果其他人也有同样的问题,我必须标准化比例,通过将两侧除以宽度将其变为 1:something。然后,我将 1:something 的比率乘以窗口的宽度,并在 while 循环中,如果图像的宽度大于窗口的宽度,则减小比例。来源:import pygamefrom sys import argvfrom win32api import GetSystemMetricspygame.init()pygame.display.init()windowwidth=GetSystemMetrics(0)*0.9windowheight=GetSystemMetrics(1)*0.8Main=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=1while imgwindowheight>windowheight:    imgwindowheight*=scale    imgwindowwidth*=scale    scale-=0.05img=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()
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

加载图像时,调整窗口以匹配图像比例。


在此代码中,设置宽度,然后根据图像比例调整高度。如果高度太大,则减小宽度以允许更小的高度。


import pygame

from sys import argv

from win32api import GetSystemMetrics

pygame.init()

pygame.display.init()


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


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

height=width*img.get_height()/img.get_width()  # keep ratio


if 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 height


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

测试输出


原来的

https://img1.sycdn.imooc.com/657854f2000187ac02570192.jpg

  • 脚本


https://img1.sycdn.imooc.com/657854fd0001f3f702940231.jpg

查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信