How can I crop an image with Pygame?

dobleseis picture dobleseis · Jun 5, 2011 · Viewed 16.3k times · Source

I am learning pygame and want a graphic for a button with the three states: normal, hover, and pressed. I have an image like this one ...

Three button states, stacked vertically

... and I want to get a new Surface using a portion of it.

I'm loading the image with this code:

 buttonStates = pygame.image.load(os.path.join('image','button.png'))

How can I make a new surface using just a portion of that graphic?

Answer

PAG picture PAG · Jun 5, 2011
cropped = pygame.Surface((80, 80))
cropped.blit(buttonStates, (0, 0), (30, 30, 80, 80))

The blit method on a surface 'pastes' another surface on to it. The first argument to blit is the source surface. The second is the location to paste to (in this case, the top left corner). The third (optional) argument is the area of the source image to paste from -- in this case an 80x80 square 30px from the top and 30px from the left.