Python PyGame负片颜色/表面

Python PyGame负片颜色/表面,python,pygame,pygame-surface,Python,Pygame,Pygame Surface,我正在用PyGame创建一个游戏。在那里我想创造负面效果,所有的屏幕都变成负面 这对于像rect这样的简单形状非常容易:(使用rect而不是pygame.draw.rect) 但我不知道如何在图像上产生这种效果。我试着做负片图像复制,但若这种效果不是即时的,会逐渐填满屏幕,那个么这将并没有帮助 # negative image copy def negcopy(image): neg = pygame.Surface(image.get_size()) for y in ran

我正在用PyGame创建一个游戏。在那里我想创造负面效果,所有的屏幕都变成负面

这对于像rect这样的简单形状非常容易:(使用
rect
而不是
pygame.draw.rect

但我不知道如何在图像上产生这种效果。我试着做负片图像复制,但若这种效果不是即时的,会逐渐填满屏幕,那个么这将并没有帮助

# negative image copy
def negcopy(image):
    neg = pygame.Surface(image.get_size())

    for y in range(image.get_height()):
        for x in range(image.get_width()):
            c = image.get_at((x, y)
            neg.set_at((x, y), (255 - color[0], 255 - color[1], 255 - color[2], 255))

    return neg
为此,您可以与特殊标志参数
BLEND\u SUB
一起使用。
创建具有相同大小的完全白色图像,并减去原始图像:

neg=pygame.Surface(image.get\u size())
负填充((255,255,255))
blit(图像,(0,0),特殊标志=pygame.BLEND\u SUB)

您可能想看看pixarray,它是一个存储像素的引擎盖下缓冲区的接口,具有更快的读/写操作。
# negative image copy
def negcopy(image):
    neg = pygame.Surface(image.get_size())

    for y in range(image.get_height()):
        for x in range(image.get_width()):
            c = image.get_at((x, y)
            neg.set_at((x, y), (255 - color[0], 255 - color[1], 255 - color[2], 255))

    return neg