如何在pygame中创建一个透明背景的表面

时间:2008-11-29 21:58:40

标签: python transparency pygame

有人可以给我一些示例代码,在pygame中创建一个透明背景的表面吗?

3 个答案:

答案 0 :(得分:35)

这应该这样做:

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

确保颜色深度(32)保持明确设置,否则这将无效。

答案 1 :(得分:14)

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

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

使用colorkey而非alpha的曲面要快得多,因为它们不需要任何混合数学运算。当SDL表面具有颜色键集时,它使用简单的位掩码,该颜色键实际上没有开销。

答案 2 :(得分:0)

您有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()创建表面的副本,该副本的图像格式可为每个像素提供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))
    
相关问题