Как обрезать изображение с помощью Pygame?

Я учусь pygame и требуется графика для кнопки с тремя состояниями: normal, hover и pressed. У меня такой же образ ...

Three button states, stacked vertically

... и я хочу получить новый Surface, используя часть его.

я загружаю изображение с этим кодом:

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

как я могу сделать новую поверхность, используя только часть этой графики?

3 ответов


cropped = pygame.Surface((80, 80))
cropped.blit(buttonStates, (0, 0), (30, 30, 80, 80))

метод blit на поверхности "вставляет" другую поверхность на нее. Первый аргумент blit-это исходная поверхность. Второе место вставить (в этом случае верхний левый угол). Третий (необязательный) аргумент-это область исходного изображения для вставки из -- в этом случае 80x80 квадратных 30px сверху и 30px слева.


вы также можете использовать pygame.Surface.subsurface метод для создания подповерхностей, которые разделяют свои пиксели с родительской поверхностью. Однако вы должны убедиться, что прямая кишка находится внутри области изображения или ValueError: subsurface rectangle outside surface area будет поднят.

subsurface = a_surface.subsurface((x, y, width, height))

Я думаю, что лучший способ сделать это-обрезать изображение этих 3-х видов кнопок во внешней программе и загрузить в другую поверхность вместо использования pygame, чтобы обрезать его