Python 使用Surface.copy()有时会失去透明度
对于某些(但不是所有!)图像,使用Python 使用Surface.copy()有时会失去透明度,python,pygame,Python,Pygame,对于某些(但不是所有!)图像,使用surface.copy()复制曲面会丢失透明度。我有两个问题 为什么复制会失去透明度?新曲面的所有声音都应该是一样的,但这显然没有发生 为什么有些图像会出现这种情况,而其他图像则不会 下面是一个“坏”图像的例子——复制时,透明度会丢失 下面是一个“良好”图像的示例——复制时,透明度不会丢失 下面是您可以运行的代码,以查看差异: import pygame def test(): screen = pygame.display.set_mode((
surface.copy()
复制曲面会丢失透明度。我有两个问题
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()
最后,这里是运行上述代码的截图。
请注意,我不是在寻找变通办法;我只想知道我对surface.copy
有什么不了解,或者你认为我对使用Pygame surface可能不了解的任何内容
我正在Windows 7机器上使用Python 3.3和Pygame 1.9.2Pro。您需要使用.convert_alpha() 尝试: 见: “使用所需的像素格式创建曲面的新副本。新曲面的格式将适合以每像素alpha快速光点显示到给定格式。如果未提供曲面,则新曲面将优化为光点显示到当前显示。” 与Surface.convert()方法不同,新图像的像素格式将与请求的源不完全相同,但它将进行优化,以便快速alpha blitting到目标。”
在pygame中,无论何时加载和图像,或创建曲面以显示它,如果它没有透明度,则应.convert()它,如果它有透明度,则应.convert_alpha()它。这不仅带来了巨大的加速,而且解决了“为什么我的透明性会这样做?”的谜团。这似乎是一个pygame bug。哈。很高兴知道。这是一个已知的bug还是我应该填写bug报告?
pygame.image.load('my_image.gif').convert_alpha()