Aha! I had better luck with the following: newsurf=pygame.Surface((128,128),flags=pygame.SRCALPHA) newsurf.blit(sourcesurf,(0,0)) newsurf.blit(masksurf,(0,0),None,pygame.BLEND_RGBA_MIN) (This time the mask surface was entirely white with the alpha channel storing the intended mask value.)