我正在使用 pygame(1.9.0rc3,虽然这也发生在 1.8.1)来创建热图。为了构建热图,我使用了一个小的 24 位 11x11px 点 PNG 图像,具有白色背景和一个非常低不透明度的灰色点,它正好停在边缘:
点图 http://img442.imageshack.us/img442/465/dot.png
点周围的区域是完美的白色,#ffffff,应该是这样。但是,当我使用 pygame 使用 BLEND_MULT 多次将图像blit 到新表面时,会出现一个灰色方块,好像点背景不是完美的白色,这没有意义。
以下代码以及包含的图像可以重现这一点:
import os
import numpy
import pygame
os.environ['SDL_VIDEODRIVER'] = 'dummy'
pygame.display.init()
pygame.display.set_mode((1,1), 0, 32)
dot_image = pygame.image.load('dot.png').convert_alpha()
surf = pygame.Surface((100, 100), 0, 32)
surf.fill((255, 255, 255))
surf = surf.convert_alpha()
for i in range(50):
surf.blit(dot_image, (20, 40), None, pygame.BLEND_MULT)
for i in range(100):
surf.blit(dot_image, (60, 40), None, pygame.BLEND_MULT)
pygame.image.save(surf, 'result.png')
运行代码时,您将获得以下图像:
混合后生成的图像 http://img263.imageshack.us/img263/4568/result.png
发生这种情况有原因吗?我该如何解决它?