Couleur / surface négative PyGame

Aug 31 2020

Je crée un jeu avec PyGame. Là, je veux créer un effet négatif, où tout écran devient négatif.

C'est assez facile pour les formes simples comme les rects: (et utilisez à la rectplace de pygame.draw.rect)

# set negative to 1 to activate effect
negative = 0

def rect(win, color, area, width=0):
    if negative:
        pygame.draw.rect(win, (255 - color[0], 255 - color[1], 255 - color[2]), area, width)
    else:
        pygame.draw.rect(win, color, area, width)

Mais je ne sais pas comment faire cet effet sur les images. J'ai essayé de faire une copie d'image négative, mais si cet effet ne sera pas instantané et remplira l'écran progressivement, cela n'aidera pas.

# 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

Réponses

4 Rabbid76 Aug 31 2020 at 13:35

Vous pouvez utiliser pygame.Surface.blitl' argument special_flagBLEND_SUB pour cela.
Créez une image entièrement blanche avec la même taille et soustrayez l'image d'origine:

neg = pygame.Surface(image.get_size())
neg.fill((255, 255, 255))
neg.blit(image, (0, 0), special_flags=pygame.BLEND_SUB)