【问题标题】:How to draw a transparent image in pygame?如何在pygame中绘制透明图像?
【发布时间】:2015-02-24 05:09:10
【问题描述】:

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

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

【问题讨论】:

    标签: python pygame pygame-surface


    【解决方案1】:

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

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

    【讨论】:

    • 为我工作。谢谢!
    【解决方案2】:

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

    通过在不传递任何参数的情况下调用(图像-)表面实例的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()
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 在哪里插入这一行或用您的代码替换我的代码的第 2 行?
      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2014-06-01
      • 2013-07-09
      • 1970-01-01
      • 2014-03-13
      • 2020-10-24
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多