4

考虑一个棋盘,我有一个透明的女王(queen.png)图像,大小为 70x70,我想将它显示在一个黑色矩形上。代码:

BLACK=(0,0,0)
queen = pygame.image.load('queen.png')

pygame.draw.rect(DISPLAYSURF, BLACK, (10, 10, 70, 70))
DISPLAYSURF.blit(queen, (10, 10))

错误:我没有得到透明图像,即黑色矩形根本不可见,只有白色背景的女王。请建议

4

3 回答 3

7

尝试将您在女王中加载的行更改为:

queen = pygame.image.load('queen.png').convert_alpha()
于 2015-02-21T12:40:19.227 回答
3

当您调用该pygame.image.load()方法时,Pygame 会从您的硬盘读取一个图像文件并返回一个包含图像数据的表面对象。此表面实例与您的显示表面是同一类型的对象,但它表示存储在内存中的图像。

通过调用convert()不带参数的(图像)表面实例的方法,Pygame 将图像表面转换为与主显示表面相同的格式。建议这样做,因为它可以更快地绘制或 blit 与显示表面具有相同像素格式(深度、标志等)的图像。使用此方法时,转换后的表面将没有 alpha 信息

幸运的是,Pygame 表面对象还提供了一种convert_alpha()方法,该方法将(图像)表面转换为保留任何 alpha 信息的快速格式。

这意味着您需要调用convert_alpha()女王实例的方法来保留原始图像的任何 alpha 信息:

BLACK=(0,0,0)

#load the image and convert the returned surface using the convert_alpha() method
queen = pygame.image.load('queen.png').convert_alpha() 

pygame.draw.rect(DISPLAYSURF, BLACK, (10, 10, 70, 70))
DISPLAYSURF.blit(queen, (10, 10))
pygame.display.update()
于 2015-02-23T20:02:42.040 回答
2

我认为不pygame.draw.rect支持 Alpha 通道。你应该使用pygame.Surface

queen = pygame.Surface([10, 10], pygame.SRCALPHA, 32)
于 2015-02-21T12:37:39.670 回答