我的精灵周围有一个奇怪的白色像素化边框

时间:2014-02-25 02:47:36

标签: python animation sprite

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

1 个答案:

答案 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)