考虑一个棋盘,我有一个大小为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))
错误:我没有获得透明图像,即根本看不到黑色矩形,只有白色背景的女王。 请建议
答案 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()