2013-11-26 5 views
3

У меня есть некоторые поверхности в Pygame с прозрачным фоном. Они одинакового размера. Но на каждом из них нарисован круг разного размера, поэтому круг точно не соответствует изображению. Вот некоторые примеры изображений (я взял скриншот в Photoshop, так что вы можете четко видеть прозрачность и размер изображений):Удалить границу вокруг изображения в Pygame

enter image description here enter image description here enter image description here

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

enter image description here enter image description here enter image description here

Круг на поверхности изменяет размер каждого кадра, так что я должен пересчитать новые поверхности в каждом кадре.

Я уже в Google, но я еще ничего не нашел для поверхностей Pygame. Я также попытался сделать свою собственную функцию, но она выглядит уродливой и намного хуже: частота кадров падает с 50 (если я не вызываю функцию) до 30 кадров в секунду (если я вызываю функцию). Я проверил его немного, и я узнал, что меньшие круги занимают больше времени, чем больше кругов. Как я могу это сделать, но быстрее. Если вы хотите, я могу показать функцию, которую я сделал.

+0

Привет! Твой вопрос довольно трудно понять. Подумайте о том, чтобы добавить некоторые изображения и структурировать поток вашего вопроса, чтобы помочь. –

+0

Я отредактировал его, теперь он должен быть более понятным. – user2746752

ответ

5

Поверхностный объект имеет метод под названием get_bounding_rect, с которого мы начнем. Функция возвращает наименьший прямоугольник, который содержит все непрозрачные пиксели на поверхности.

pixel_rect = image.get_bounding_rect() 

С размером этого прямоугольника, мы можем создать новую поверхность:

trimmed_surface = pygame.Surface(pixel_rect.size) 

Теперь Blit ту часть image, содержащейся в pixel_rect на trimmed_surface:

trimmed_surface.blit(image, (0,0), pixel_rect) 

На данный момент , trimmed_surface должна быть такой же размер, как pixel_rect, с нежелательными прозрачными рядами и co «Оснащены» с исходной поверхности.

Документация для Surface.get_bounding_rect: http://www.pygame.org/docs/ref/surface.html#Surface.get_bounding_rect

Смежные вопросы