繁体   English   中英

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

[英]How to draw a transparent image in pygame?

考虑一个棋盘,我有一个大小为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))

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

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

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

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

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

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

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

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

这意味着您需要调用queen实例的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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM