gpt4 book ai didi

python - PyGame:每像素 alpha 的半透明 Sprite

转载 作者:太空狗 更新时间:2023-10-29 17:30:32 25 4
gpt4 key购买 nike

是否可以显示具有可控 alpha 的 PyGame 表面?我想采用一个具有自己的每像素 alpha 的表面,并在不影响表面数据的情况下以可变级别的半透明度显示它并保持透明度不变,即表面上的物体将保持其形状但它们的“内容”或多或少半透明。

换句话说,我想将源图像中的每像素 alpha 与运行时计算的每表面 alpha 相结合。

最佳答案

Pygame documentation说你不能将表面 alpha 与每像素 alpha 结合起来,但如果你使用的是 Pygame 1.8.1 或更新版本,你可以通过使用 special_flags 参数来解决这个问题。 blit().

这是我的做法:

# Load an image with per-pixel alpha
s = pygame.image.load('spam.png')
s = s.convert_alpha()

# Simulate s.set_alpha(alpha)
alpha_img = pygame.Surface(s.get_rect().size, pygame.SRCALPHA)
alpha_img.fill((255, 255, 255, alpha))
s.blit(alpha_img, (0, 0), special_flags=pygame.BLEND_RGBA_MULT)

其工作方式是创建与第一个表面大小相同的第二个表面,并使用 RGBA multiplication 将其 blit 到第一个表面上.通过使第二张图像的 R、G 和 B 分量等于 255,相乘不会影响图像的颜色,但会按给定的 alpha 因子缩放 alpha channel 。

请注意,上述方法与调用 set_alpha() 的不同之处在于 set_alpha() 可以通过调用 set_alpha(255) 来反转。如果使用上述方法,将导致每个像素的像素 alpha 发生变化,因此该过程不能直接反转。

关于python - PyGame:每像素 alpha 的半透明 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4276850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com