PyGame Negative Color / Surface
Aug 31 2020
Я создаю игру с PyGame. Там я хочу создать негативный эффект, когда весь экран станет отрицательным.
Это довольно просто для простых фигур, таких как прямоугольники: (и использовать rectвместо 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)
Но я не знаю, как сделать этот эффект на изображениях. Я пытался сделать копию негативного изображения, но если этот эффект не будет мгновенным и будет постепенно заполнять экран, то это не поможет.
# 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
Ответы
4 Rabbid76 Aug 31 2020 at 13:35
Вы можете использовать pygame.Surface.blitс special_flag аргументом BLEND_SUBдля этого.
Создайте полностью белое изображение того же размера и вычтите исходное изображение:
neg = pygame.Surface(image.get_size())
neg.fill((255, 255, 255))
neg.blit(image, (0, 0), special_flags=pygame.BLEND_SUB)