[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] Issue with pygame.mask



Hi,

I am using pygame.mask.from_surface(Surface, color, threshold = (0,0,0,255)) to convert a surface into a 2D binary mask.

I expected the default threshold (0,0,0) of this function to have it match only that the exact color specified (ie within 0 values of the color). However, it seems that it instead matches NO pixels. To get the behaviour I expected I needed to specify a threshold of (1, 1, 1, 255)

Is this a bug, or are my expectations wrong?

Regards,
Peter Finlayson
import pygame

def main():
    pygame.init()
    pygame.display.set_mode((800, 600))

    surf = pygame.Surface((20, 20))
    surf.fill((255, 255, 255))

    pos = (10, 10)

    color = surf.get_at(pos)
    print("Pixel at %s is %s" % (str(pos), str(color)))

    threshold = (0, 0, 0, 255)  # the default threshold
    mask = pygame.mask.from_threshold(surf, color, threshold)
    print("Mask has %d pixels of colour %s set with a threshhold %s" %
          (mask.count(), str(color), str(threshold)))

    threshold = (1, 1, 1, 255)
    mask = pygame.mask.from_threshold(surf, color, threshold)
    print("Mask has %d pixels of colour %s set with a threshhold %s" %
          (mask.count(), str(color), str(threshold)))

    threshold = (2, 2, 2, 255)
    color = (254, 254, 254, 255)
    mask = pygame.mask.from_threshold(surf, color, threshold)
    print("Mask has %d pixels of colour %s set with a threshhold %s" %
          (mask.count(), str(color), str(threshold)))


if __name__ == "__main__":
    try:
        main()
    finally:
        pygame.quit()