import pygame, sys
from pygame.locals import *
white=(255,255,255)
black=(0,0,0)
green=(0,255,0)
pygame.init()
window=pygame.display.set_mode((740, 450),0,32)
image=pygame.image.load("Rogue.png")
image.set_colorkey(white)
x,y=0,0
movex,movey=0,0
while True:
window.fill(green)
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_LEFT:
movex+=-1
elif event.key==K_RIGHT:
movex+=1
elif event.key==K_UP:
movey+=-1
elif event.key==K_DOWN:
movey+=1
x=movex
y=movey
window.blit(image,(x,y))
pygame.display.update()
每次我运行代码时,我的角色都有一种丑陋的白色光环...... 如果你可以尝试一下,告诉我什么是错的,这将是恒星! :d 这是Png:http://imgur.com/h2yZGfm 截图:http://imgur.com/wUUC8a6
答案 0 :(得分:0)
这是一个常见问题。图像的透明部分是透明白色;也就是说,RGBA值接近(1,1,1,0)。不透明区域边框上的像素部分透明,因此与透明白色混合。这就是为什么你看到精灵边界周围的白雾。
有两种方法可以解决您的问题。
此问题在代码之外更好地修复。在您使用的任何图形工具中,您需要使图像的部分透明部分使用与精灵的附近不透明像素匹配的RGB值。根据工具的不同,可能会有内置操作来实现此目的。
对于精灵中的每个像素(X,Y):
设(R,G,B,A)为像素的颜色。如果我认为这些是在[0,1]范围内的浮点数。当前颜色(R,G,B)是错误的,因为它已根据像素的alpha A与白色混合。也就是说,如果(R',G',B')是正确的颜色,那么
(R,G,B)= A *(1,1,1)+(1 - A)*(R',G',B')。
求解(R',G',B')
(R',G',B')=((R,G,B) - (A,A,A))/(1 - A)。
因此,您可以使用以下方法修复颜色分量。
R = (R - A) / (1 - A)
G = (G - A) / (1 - A)
B = (B - A) / (1 - A)