如何在 Pygame 中更改图像大小? [英] How to change an image size in Pygame?

查看:351
本文介绍了如何在 Pygame 中更改图像大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有我要导入的图像:

look_1 = pygame.image.load('data\\png\\look1.png').convert_alpha()

而我试图减小其尺寸的是:

pygame.transform.scale()

但这似乎不是正确的做法.

解决方案

你必须决定是否要使用

导入pygame类ScaleSprite(pygame.sprite.Sprite):def __init__(self, center, image):super().__init__()self.original_image = 图像self.image = 图像self.rect = self.image.get_rect(center = center)self.mode = 1自我成长 = 0定义更新(自我):如果自我成长>100:self.mode = -1如果 self.grow <1:self.mode = 1self.grow += 1 * self.modeorig_x, orig_y = self.original_image.get_size()size_x = orig_x + round(self.grow)size_y = orig_y + round(self.grow)self.image = pygame.transform.scale(self.original_image, (size_x, size_y))self.rect = self.image.get_rect(center = self.rect.center)pygame.init()窗口 = pygame.display.set_mode((300, 300))时钟 = pygame.time.Clock()sprite = ScaleSprite(window.get_rect().center, pygame.image.load("Banana64.png"))group = pygame.sprite.Group(精灵)运行 = 真运行时:时钟滴答(60)对于 pygame.event.get() 中的事件:如果 event.type == pygame.QUIT:运行 = 错误组.更新()window.fill(0)group.draw(窗口)pygame.display.flip()pygame.quit()出口()

There is the image I'm importing :

look_1 = pygame.image.load('data\\png\\look1.png').convert_alpha()

And what I tried to get its size reduce was this :

pygame.transform.scale()

But this seems not to be the right way to do it.

解决方案

You have to decide if you want to use Use pygame.transform.smoothscale or pygame.transform.scale. While pygame.transform.scale performs a fast scaling with the nearest pixel, pygame.transform.smoothscale scales a surface smoothly to any size with interpolation of the pixels.
Scaling up a Surface with pygame.transform.scale() will result in a jagged result. When downscaling you lose information (pixels). In comparison, pygame.transform.smoothscale blurs the Surface.

pygame.transform.scale() and pygame.transform.smoothscale are used in the same way. They do not scale the input Surface itself. It creates a new surface and does a scaled "blit" to the new surface. The new surface is returned by the return value. They:

  1. Creates a new surface (newSurface) with size (width, height).
  2. Scale and copy Surface to newSurface.
  3. Return newSurface.

look_1 = pygame.image.load('data\\png\\look1.png').convert_alpha()
look_1 = pygame.transform.scale(look_1, (new_width, new_height)) 

or

look_1 = pygame.image.load('data\\png\\look1.png').convert_alpha()
look_1 = pygame.transform.smoothscale(look_1, (new_width, new_height)) 


See also Transform scale and zoom surface

Minimal example:

import pygame

class ScaleSprite(pygame.sprite.Sprite):
    def __init__(self, center, image):
        super().__init__()
        self.original_image = image
        self.image = image
        self.rect = self.image.get_rect(center = center)
        self.mode = 1
        self.grow = 0

    def update(self):
        if self.grow > 100:
            self.mode = -1
        if self.grow < 1:
            self.mode = 1
        self.grow += 1 * self.mode 

        orig_x, orig_y = self.original_image.get_size()
        size_x = orig_x + round(self.grow)
        size_y = orig_y + round(self.grow)
        self.image = pygame.transform.scale(self.original_image, (size_x, size_y))
        self.rect = self.image.get_rect(center = self.rect.center)

pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()

sprite = ScaleSprite(window.get_rect().center, pygame.image.load("Banana64.png"))
group = pygame.sprite.Group(sprite)

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    group.update()

    window.fill(0)
    group.draw(window)
    pygame.display.flip()

pygame.quit()
exit()

这篇关于如何在 Pygame 中更改图像大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆