【问题标题】:why does image become pixelated? pygame [duplicate]为什么图像会像素化? pygame [重复]
【发布时间】:2021-12-14 00:52:41
【问题描述】:

我很想知道当我将鼠标悬停在马铃薯上时,它是如何以及为什么会变得更加像素化,直到它达到 16x16 像素的马铃薯图像?我自己真的不知道从哪里开始解释。

main.py

import pygame
import math
import random
from potato import Potato
knife = pygame.image.load("knife.png")
knife = pygame.transform.rotate(knife, 270)
knife = pygame.transform.scale(knife, (200, 200))
potato = pygame.image.load("potato.png")
potato = pygame.transform.scale(potato, (200, 160))
WIDTH, HEIGHT = 800, 500
window = pygame.display.set_mode((WIDTH, HEIGHT))


def main():
    done = False
    potatoThing = Potato(knife, potato, WIDTH/2-100, HEIGHT/2 - 80)
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
        mousex, mousey = pygame.mouse.get_pos()
        window.fill((195, 245, 98))
        potatoThing.draw(window)
        potatoThing.update(mousex, mousey)
        pygame.display.update()
    pygame.quit()

main()

土豆.py

import pygame
import math
import random
from pygame.math import Vector2 as vect

def distanceBecauseMeep(min, max, value):
    if value < min:
        return min
    elif value > max:
        return max
    else:
        return value

class Potato:
    def __init__(self, sprite1, sprite2, x, y):
        self.knifeSprite = sprite1
        self.potatoSprite = sprite2
        self.pos = vect(x, y)
        self.isHoveringOver = False
        self.sizeOfPotato = (200, 160)
        self.sizeOfKnife = (200, 200)
    def draw(self, win):
        if self.isHoveringOver:

            self.sizeOfPotato = (220, 180)
            self.sizeOfKnife = (220, 220)

        else:

            self.sizeOfPotato = (200, 160)
            self.sizeOfKnife = (200, 200)

        self.potatoSprite = pygame.transform.scale(self.potatoSprite, self.sizeOfPotato)
        self.knifeSprite = pygame.transform.scale(self.knifeSprite, self.sizeOfKnife)

        win.blit(self.potatoSprite, (self.pos))
        win.blit(self.knifeSprite, (self.pos))
    def update(self, xPos, yPos):
        self.x = xPos
        self.y = yPos

        self.CosX = distanceBecauseMeep(self.pos.x, self.pos.x + self.sizeOfPotato[0], self.x)
        self.CosY = distanceBecauseMeep(self.pos.y, self.pos.y + self.sizeOfPotato[1], self.y)

        self.distance = math.sqrt((self.CosX - self.x)**2 + (self.CosY - self.y)**2)
        if self.distance <= 0.0:
            self.isHoveringOver = True
        else:
            self.isHoveringOver = False

这里有一些图片可以帮助说明我的观点和困惑

当你第一次启动程序时:

当你将鼠标悬停在它上面几次时

它可能与potato.py 中的元组有关,但我不太确定。我真的很困惑,甚至不知道这是图像像素化的可能性。

试过了

pygame.transform.smoothscale

但所做的只是模糊图像而不是像素化图像

【问题讨论】:

  • @RandomDavis 我试过pygame.transform.smoothscale 它所做的只是让它变得模糊而不是像素化
  • 您是否曾尝试在实际的图像编辑程序中反复缩小和放大图像?发生什么了?为什么?
  • 这是因为我反复缩放同一张图片

标签: python pygame


【解决方案1】:

您反复将同一张图片缩放为不同的尺寸并用它替换原始图片。每次都是有损操作;相反,请保留 原始 版本并将其缩放到每个所需的大小。 (只有两种尺寸,您可以提前为每种尺寸执行此操作,而不是每帧执行一次。)

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2021-03-26
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多