Python 在pygame中缩放图像后颜色错误
我有一个64*64px的树图像: 我想在运行时调整此图像的大小,使其成为全屏模式。我试图为此编写一些代码(见下文)。执行此程序后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
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函数从文档和堆栈溢出中解释每个标志:
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()