Python 在pygame中缩放图像后颜色错误

Python 在pygame中缩放图像后颜色错误,python,pygame,Python,Pygame,我有一个64*64px的树图像: 我想在运行时调整此图像的大小,使其成为全屏模式。我试图为此编写一些代码(见下文)。执行此程序后 import pygame, sys pygame.init() info = pygame.display.Info() WINDOWHEIGHT = info.current_h WINDOWWIDTH = info.current_w DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEI

我有一个64*64px的树图像:

我想在运行时调整此图像的大小,使其成为全屏模式。我试图为此编写一些代码(见下文)。执行此程序后

import pygame, sys

pygame.init()

info = pygame.display.Info()
WINDOWHEIGHT = info.current_h
WINDOWWIDTH = info.current_w

DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT),pygame.FULLSCREEN)

spriteImage = pygame.image.load('Sprite-0003.png')
spriteSurf = pygame.Surface((WINDOWWIDTH,WINDOWHEIGHT))
pygame.transform.scale(spriteImage, (WINDOWWIDTH,WINDOWHEIGHT), spriteSurf)

def close():
    pygame.quit()
    sys.exit()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            close()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                close()

    DISPLAYSURF.blit(spriteSurf, (0,0))
    pygame.display.update()
我得到这个结果图像。比较它们的颜色:

我的程序在什么时候决定改变这两幅图像的颜色?
如何修复它?

首先:查看pygame.image.load():

对于alpha透明度,如.png图像中,使用convert_alpha()命令 方法,使图像具有每像素的透明度

第二:Blit函数从文档和堆栈溢出中解释每个标志:

  • 文件:
  • blit(源、目标、区域=无,特殊标志=0)->Rect

    可选的特殊标志用于传递1.8.0中的新内容:BLEND_ADD, 1.8.1中新增的混合接头、混合接头、混合接头、混合接头最小值、混合接头最大值: 混合添加,混合子,混合子,混合子,混合子,混合子, BLEND_RGBA_MAX BLEND_RGB_ADD,BLEND_RGB_SUB,BLEND_RGB_MULT, BLEND_RGB_MIN,BLEND_RGB_MAX可能与其他特殊的布告标志一起使用 在将来添加

    对于具有“颜色关键点”或“覆盖层alpha”的曲面,自我光点可能会给出与非自我光点稍有不同的颜色

  • 每个标志的堆栈溢出说明:
  • 基本上,“添加”将两个源像素相加,并在255处剪裁结果。SUB减去两个像素并在0处剪辑

    MULT: result = (p1 * p2) / 256
    
    最小值:选择每个通道的较低值(不是整个像素),因此如果pixel1是
    (100,10,0)
    ,pixel2是
    (0,10100)
    ,则得到
    (0,10,0)

    另外还有一个从文档中看不明显的混合模式:0(或者只保留参数)。此模式将源曲面“戳记”到目标曲面。如果源表面有一个alpha通道,这将决定每个像素的“强度”(0=无效果,255=复制像素,128:结果=.5*源+.5*目标)。

    有用效果:要使某个区域变暗,请使用混合模式0,将源/图章表面填充为黑色,并将alpha设置为10:
    (0,0,10)

    要使其变亮,请使用白色
    (255255255,10)

    我认为您的问题来自alpha频道。

    因此:

    Fom:

    源曲面(来自图像)和目标曲面不使用相同的颜色键

    使用默认构造函数
    pygame.Surgafe
    可以得到一个没有默认键的曲面

    曲面可以有许多额外属性,如alpha平面、颜色关键点、源矩形剪裁。这些功能主要影响曲面与其他曲面的布点方式。blit例程将尽可能尝试使用硬件加速,否则将使用高度优化的软件blit方法


    让我们考虑复制CyoKEY,或者(最好)克隆图像表面并缩放它。

    我添加了这个CODELIN <代码> SristeSurf。我不确定透明的颜色键会如何影响这一点。你说问题可能来自alpha通道是什么意思?的确!它确实解决了问题。但是为什么呢?此png图像根本不使用透明度。。阿尔法通道是如何影响颜色的?不确定,但看起来你的红色不知怎的不存在了。就像太阳(没有橙色/红色),树也一样。可能有点移位,但听起来很奇怪…不知道,应该看看源代码。但我认为这就是为什么他们强烈建议在文档中使用convert_alpha for png。@classisindingmusic确实如此。它有一个全为255的alpha通道。
    MAX: Opposite of MIN (i.e. (100,10,100))
    
    spriteImage = pygame.image.load('Sprite-0003.png').convert_alpha()