如何在pygame中绘制透明图像?

时间:2015-02-21 12:08:00

标签: python pygame pygame-surface

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

queen = pygame.image.load('queen.png').convert_alpha()

答案 1 :(得分:1)

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

queen = pygame.Surface([10, 10], pygame.SRCALPHA, 32)

答案 2 :(得分:1)

当您调用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()
相关问题