【发布时间】:2012-10-14 04:10:44
【问题描述】:
我想以指定的透明度显示an image with alpha,但不知道该怎么做。
为了详细说明我是如何解决这个问题的,下面的简介是来自this SO answer 的一段稍微修改过的代码,但是如果你运行它,你会看到“图像”失去了它的原生 alpha,而“image2”的 alpha 永远不会改变!呸。
#!/usr/bin/env python
import pygame, sys
pygame.init()
window = pygame.display.set_mode((200, 200))
background = pygame.Surface((window.get_size()))
background.fill((255, 255, 255))
image = image2 = pygame.image.load('alpha.png')
image = image.convert()
rect = image.get_rect()
image2 = image2.convert_alpha()
rect2 = image2.get_rect()
rect2.left = rect.width + 1
i = 0
while True:
for event in pygame.event.get():
if event.type == 12:
pygame.quit()
sys.exit()
image.set_alpha(i)
image2.set_alpha(i)
window.fill((255, 255, 255))
window.blit(background, background.get_rect())
window.blit(image, rect)
window.blit(image2, rect2)
if i == 255:
i = 0
else:
i += 1
pygame.display.update()
pygame.time.Clock().tick(60)
那么……它是怎么做到的?
【问题讨论】:
-
我不知道,但
image = image2 = pygame.image.load('alpha.png')可能引用了同一个实例,删除了图像 2 的透明度。 -
您是在寻找每个像素的 alpha,还是每个表面一个 alpha 值?
-
如果我分别声明 image 和 image2 ,我会得到相同的结果。老实说,我并不关心我是怎么做的,只要它是有效的并且我得到了想要的结果:改变图像或表面的透明度,同时保留原始的 alpha 值。
标签: python pygame alpha geometry-surface blit