在 pygame 中渲染消除锯齿的透明文本
Render anti-aliased, transparent text in pygame
我想要一些文本,我可以更改其 alpha 值,同时仍然对其进行抗锯齿以使其看起来不错。
label1 抗锯齿但不透明
label2 是透明的但没有抗锯齿
我想要两者兼具的文字。
谢谢
import pygame
pygame.init()
screen = pygame.display.set_mode((300, 300))
font = pygame.font.SysFont("Segoe UI", 50)
label1 = font.render("hello", 1, (255,255,255))
label1.set_alpha(100)
label2 = font.render("hello", 0, (255,255,255))
label2.set_alpha(100)
surface_box = pygame.Surface((100,150))
surface_box.fill((0,150,150))
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill((150,0,150))
screen.blit(surface_box, (40, 0))
screen.blit(label1, (0,0))
screen.blit(label2, (0,50))
pygame.display.update()
pygame.quit()
如果您可以修改示例以具有这些功能,我们将不胜感激。
渲染文本表面。
通过传递 pygame.SRCALPHA
创建一个具有 per-pixel alpha 的透明表面,并用白色和所需的 alpha 值填充它。
将 alpha 表面 Blit 到文本表面上,并将 pygame.BLEND_RGBA_MULT
作为 special_flags
参数传递。这将使表面的可见部分透明。
import pygame as pg
pg.init()
clock = pg.time.Clock()
screen = pg.display.set_mode((640, 480))
font = pg.font.Font(None, 64)
blue = pg.Color('dodgerblue1')
sienna = pg.Color('sienna2')
# Render the text surface.
txt_surf = font.render('transparent text', True, blue)
# Create a transparent surface.
alpha_img = pg.Surface(txt_surf.get_size(), pg.SRCALPHA)
# Fill it with white and the desired alpha value.
alpha_img.fill((255, 255, 255, 140))
# Blit the alpha surface onto the text surface and pass BLEND_RGBA_MULT.
txt_surf.blit(alpha_img, (0, 0), special_flags=pg.BLEND_RGBA_MULT)
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
screen.fill((30, 30, 30))
pg.draw.rect(screen, sienna, (105, 40, 130, 200))
screen.blit(txt_surf, (30, 60))
pg.display.flip()
clock.tick(30)
pg.quit()
我想要一些文本,我可以更改其 alpha 值,同时仍然对其进行抗锯齿以使其看起来不错。
label1 抗锯齿但不透明
label2 是透明的但没有抗锯齿
我想要两者兼具的文字。 谢谢
import pygame
pygame.init()
screen = pygame.display.set_mode((300, 300))
font = pygame.font.SysFont("Segoe UI", 50)
label1 = font.render("hello", 1, (255,255,255))
label1.set_alpha(100)
label2 = font.render("hello", 0, (255,255,255))
label2.set_alpha(100)
surface_box = pygame.Surface((100,150))
surface_box.fill((0,150,150))
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill((150,0,150))
screen.blit(surface_box, (40, 0))
screen.blit(label1, (0,0))
screen.blit(label2, (0,50))
pygame.display.update()
pygame.quit()
如果您可以修改示例以具有这些功能,我们将不胜感激。
渲染文本表面。
通过传递
pygame.SRCALPHA
创建一个具有 per-pixel alpha 的透明表面,并用白色和所需的 alpha 值填充它。将 alpha 表面 Blit 到文本表面上,并将
pygame.BLEND_RGBA_MULT
作为special_flags
参数传递。这将使表面的可见部分透明。
import pygame as pg
pg.init()
clock = pg.time.Clock()
screen = pg.display.set_mode((640, 480))
font = pg.font.Font(None, 64)
blue = pg.Color('dodgerblue1')
sienna = pg.Color('sienna2')
# Render the text surface.
txt_surf = font.render('transparent text', True, blue)
# Create a transparent surface.
alpha_img = pg.Surface(txt_surf.get_size(), pg.SRCALPHA)
# Fill it with white and the desired alpha value.
alpha_img.fill((255, 255, 255, 140))
# Blit the alpha surface onto the text surface and pass BLEND_RGBA_MULT.
txt_surf.blit(alpha_img, (0, 0), special_flags=pg.BLEND_RGBA_MULT)
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
screen.fill((30, 30, 30))
pg.draw.rect(screen, sienna, (105, 40, 130, 200))
screen.blit(txt_surf, (30, 60))
pg.display.flip()
clock.tick(30)
pg.quit()