Pygame: заполнить прозрачные области текста цветом - PullRequest
0 голосов
/ 02 мая 2018

У меня есть несколько шрифтов, которые я хотел бы использовать, которые в основном представляют собой контуры букв, но внутренности прозрачные. Как бы я заполнил цветом только внутренние области этих шрифтов? Я подозреваю, что он будет использовать специальные режимы RGBA_BLEND, но я не знаком с их функциональностью.

Вот пример используемого мной шрифта: https://www.dafont.com/fipps.font?back=bitmap

Прямо сейчас я просто отображаю шрифт на поверхности, и для этого я написал вспомогательную функцию. В идеале я мог бы интегрировать это в свою функцию.

def renderText(surface, text, font, color, position):
    x, y = position[0], position[1]
    width, height = font.size(text)
    position = x-width//2, y-height//2
    render = font.render(text, 1, color)
    surface.blit(render, position)

Большое спасибо за любую помощь, которую вы можете мне оказать!

1 Ответ

0 голосов
/ 02 мая 2018

Один из вариантов - определить размер текста по размеру поверхности, залить его тем цветом, который вам нужен, и пометить текст на нем. Например, вы можете сделать это:

text = font.render('Hello World!', True, (255, 255, 255)
temp_surface = pygame.Surface(text.get_size())
temp_surface.fill((192, 192, 192))
temp_surface.blit(text, (0, 0))
screen.blit(temp_surface, (0, 0))

Это создаст временную поверхность, которая должна заполнить прозрачные пиксели текстовой поверхности. Есть и другой вариант использования set_at(), но он слишком дорог в вычислительной мощности для того, что вы делаете, и лучше всего его использовать для предварительной обработки поверхностей.

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

...