PyGame负色/表面
PyGame Negative Color / Surface
我正在使用 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
为此,您可以将 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)
我正在使用 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
为此,您可以将 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)