Time for action – accessing surface pixel data with NumPy
In this tutorial we will tile a small image to fill the game screen. Perform the following steps to do so:
The
array2d
function copies pixels into a two-dimensional array. There is a similar function for three-dimensional arrays. We will copy the pixels from the avatar image into an array:pixels = pygame.surfarray.array2d(img)
Let's create the game screen from the shape of the
pixels
array using theshape
attribute of the array. The screen will be seven times larger in both directions.X = pixels.shape[0] * 7 Y = pixels.shape[1] * 7 screen = pygame.display.set_mode((X, Y))
Tiling the image is easy with the NumPy
tile
function. The data needs to be converted to integer values, since colors are defined as integers.new_pixels = np.tile(pixels, (7, 7)).astype(int)
The
surfarray
module has a special function (blit_array
) to display the array on the screen.pygame.surfarray.blit_array(screen, new_pixels)
This produces the following screenshot...