PyGame Negative Farbe / Oberfläche

Aug 31 2020

Ich erstelle ein Spiel mit PyGame. Dort möchte ich einen negativen Effekt erzeugen, bei dem der gesamte Bildschirm negativ wird.

Dies ist ziemlich einfach für einfache Formen wie rects: (und verwenden rectstatt 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)

Aber ich weiß nicht, wie ich diesen Effekt auf Bilder anwenden soll. Ich habe versucht, ein Negativbild zu kopieren, aber wenn dieser Effekt nicht sofort auftritt und den Bildschirm allmählich ausfüllt, hilft dies nicht weiter.

# 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

Antworten

4 Rabbid76 Aug 31 2020 at 13:35

Sie können dies pygame.Surface.blitmit dem Argument special_flag verwendenBLEND_SUB .
Erstellen Sie ein vollständig weißes Bild mit derselben Größe und subtrahieren Sie das Originalbild:

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