gpt4 book ai didi

python - 使用 Surface.copy() 有时会失去透明度

转载 作者:行者123 更新时间:2023-12-02 08:38:16 24 4
gpt4 key购买 nike

对于某些(但不是全部!)图像,使用 surface.copy() 复制表面会丢失透明度。所以我有两个问题?

  1. 为什么文案会失去透明度? docs听起来新表面的一切都应该是一样的,但这显然没有发生。

  2. 为什么某些图像会出现这种情况,而另一些图像则不会?

这是一个“坏”图像的示例 - 复制时,透明度会丢失

Bad image.

这是一个“良好”图像的示例 - 复制时,透明度不会丢失。

Good image.

这是您可以运行以查看差异的代码:

import pygame

def test():
screen = pygame.display.set_mode((320, 240))
bad_original = pygame.image.load('bad-image.gif')
bad_copied = bad_original.copy()

good_original = pygame.image.load('good-image.gif')
good_copied = good_original.copy()

while True:
for event in pygame.event.get():
if (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE or
event.type == pygame.QUIT):
pygame.quit()

screen.fill((150, 150, 150))

screen.blit(bad_original, (0,0))
screen.blit(bad_copied, (100, 0))
screen.blit(good_original, (0,100))
screen.blit(good_copied, (100, 100))
pygame.display.flip()

if __name__ == '__main__':
test()

最后,为了完成这个任务,下面是运行上述代码的屏幕截图。 Result of running the above code.

请注意,我并不是在寻找解决方法;我只是想知道我对 Surface.copy 的不理解之处,或者您认为我可能不理解的有关使用 Pygame 表面的任何内容。

我在 Windows 7 计算机上使用 Python 3.3 和 Pygame 1.9.2pre。

最佳答案

您需要使用.convert_alpha()

尝试:

pygame.image.load('my_image.gif').convert_alpha()

参见: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert_alpha

“使用所需的像素格式创建表面的新副本。新表面的格式将适合通过每个像素 alpha 快速传输到给定格式。如果没有给出表面,则新表面将被优化用于位图传输到当前显示。

与 Surface.convert() 方法不同,新图像的像素格式不会与请求的源完全相同,但它将针对快速 alpha blitting 到目标进行优化。”

在 pygame 中,任何时候你加载图像或创建表面,为了显示它,如果它没有透明度,你应该 .convert() 它,或者如果它有透明度,你应该 .convert_alpha() 。这既带来了很大的加速,又解决了“为什么我的透明度会这样做?”的谜团。

关于python - 使用 Surface.copy() 有时会失去透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com