ヒートマップを作成するためにpygame(1.9.0rc3、ただしこれは1.8.1でも発生します)を使用しています。ヒートマップを作成するために、白い背景と非常に不透明度の低い灰色のドットが端で正確に停止する、小さな24ビットの11x11pxドットPNG画像を使用します。
ドット画像http://img442.imageshack.us/img442/465/dot.png
ドットの周りの領域は、本来あるべき完全な白、#ffffffです。ただし、pygameを使用して、BLEND_MULTを使用して画像を新しいサーフェスに複数回ブリットすると、ドットの背景が完全な白ではないかのように灰色の正方形が表示されます。これは意味がありません。
次のコードと含まれている画像は、これを再現できます。
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
これが起こる理由はありますか?どうすれば回避できますか?