Как я могу обрезать изображение с помощью Pygame? - PullRequest
16 голосов
/ 05 июня 2011

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

Three button states, stacked vertically

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

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

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

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

Ответы [ 3 ]

29 голосов
/ 05 июня 2011
cropped = pygame.Surface((80, 80))
cropped.blit(buttonStates, (0, 0), (30, 30, 80, 80))

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

0 голосов
/ 14 июня 2018

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

subsurface = a_surface.subsurface((x, y, width, height))
0 голосов
/ 31 августа 2017

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

...