如何在pygame中制作具有透明背景的表面

Posted

技术标签:

【中文标题】如何在pygame中制作具有透明背景的表面【英文标题】:How to make a surface with a transparent background in pygame 【发布时间】:2008-11-29 21:58:40 【问题描述】:

谁能给我一些在 pygame 中创建具有透明背景的表面的示例代码?

【问题讨论】:

【参考方案1】:

应该这样做:

image = pygame.Surface([640,480], pygame.SRCALPHA, 32)
image = image.convert_alpha()

确保颜色深度 (32) 保持明确设置,否则这将不起作用。

【讨论】:

我认为 - image = pygame.Surface([640, 480], pygame.SRCALPHA) 就是你所需要的。 我还想补充一点,您现在可以这样设置颜色:cloud_color = (255, 255, 255, 120),其中最后一个值的范围是 0 到 255。【参考方案2】:

你也可以给它一个颜色键,就像 GIF 文件的透明度一样。这是制作精灵最常用的方法。原位图有原图,并且有某种颜色作为背景,不会被绘制出来,也就是colorkey:

surf.set_colorkey((255,0,255)) // Sets the colorkey to that hideous purple

使用 colorkey 而不是 alpha 的表面更快地进行 blit,因为它们不需要任何混合数学。当 SDL 表面有一个颜色键集时,它使用一个简单的位掩码,这几乎没有开销。

【讨论】:

这是正确的答案。链接:riptutorial.com/pygame/example/23788/transparency【参考方案3】:

你有 3 种可能性:

set_colorkey()设置透明色键

颜色键指定被视为透明的颜色。例如,如果您有一张应该是透明的黑色背景的图像,请设置一个黑色键:

my_surface.set_colorkey((0, 0, 0))

您可以在创建新表面时启用其他功能。设置 SRCALPHA 标志以创建具有包含每像素 alpha 的图像格式的表面。像素的初始值为(0, 0, 0, 0):

my_surface = pygame.Surface((width, height), pygame.SRCALPHA)

使用convert_alpha() 创建Surface 的副本,其图像格式提供每个像素的 Alpha。

但是,如果您创建一个新表面并使用convert_alpha(),则 Alpha 通道最初会设置为最大值。像素的初始值为 (0, 0, 0, 255)。您需要用透明颜色填充整个表面,然后才能在其上绘制任何内容:

my_surface = pygame.Surface((width, height))
my_surface = my_surface.convert_alpha()
my_surface.fill((0, 0, 0, 0))

【讨论】:

以上是关于如何在pygame中制作具有透明背景的表面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pygame 中将具有一定透明度的 PNG 粘贴到表面上? [复制]

如何在 SwiftUI 中制作具有透明背景的模态视图?

如何制作具有透明背景的 Flash 电影

如何使用 ggplot2 在 R 中制作具有透明背景的图形?

PyGame:具有每像素 alpha 的半透明精灵

在pygame中的透明表面上渲染抗锯齿文本