如何在Pygame中以一些透明度对PNG进行blit?

Eri*_*ric 14 python png pygame alpha blit

我试图将PNG图像blit到表面上,但由于某种原因,图像的透明部分变黑,这是简单的代码:

screen = pygame.display.set_mode((800, 600), pygame.DOUBLEBUF, 32)

world = pygame.Surface((800, 600), pygame.SRCALPHA, 32)
treeImage = pygame.image.load("tree.png")

world.blit(treeImage, (0,0), (0,0,64,64))
screen.blit(world, pygame.rect.Rect(0,0, 800, 600))
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决问题?图像具有Alpha透明度,我在PhotoShop中将其打开,背景变为透明,而不是黑色或白色或任何其他颜色.

感谢您的支持 :)

Nic*_*k T 26

http://www.pygame.org/docs/ref/image.html建议:

对于Alpha透明度,如.png图像convert_alpha()在加载后使用该方法,以便图像具有每像素透明度.

  • 从带有alpha的图像加载pygame.image.load时已经具有alpha了。 (2认同)
  • @PeterShinners实际上,调用`convert()`或`convert_alpha()`仍然是首选,因为不这样做意味着blits都需要像素格式转换,这非常慢. (2认同)

小智 7

你没有翻转双缓冲器.

import pygame
from pygame.locals import Color

screen = pygame.display.set_mode((800, 600))

treeImage = pygame.image.load("tree.png").convert_alpha()

white = Color('white')

while(True):
    screen.fill(white)
    screen.blit(treeImage, pygame.rect.Rect(0,0, 128, 128))
    pygame.display.flip()
Run Code Online (Sandbox Code Playgroud)

这应该适用于您的问题.