Pygame Surface.set_at 正在将 alpha 设置为 255?
Pygame Surface.set_at is setting alpha to 255?
我有这个代码:
import pygame, sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([100,100,100])
pygame.display.flip()
image = pygame.image.load("tree.png").convert_alpha()
surf = pygame.Surface([1024,1024])
for y in range(0,1024):
for x in range(0,1024):
surf.set_at((x,y), image.get_at((x,y)))
if x == 0 and y == 0:
print image.get_at((x,y))
print surf.get_at((x,y))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill([100,100,100])
screen.blit(surf, [0,0])
pygame.display.flip()
pygame.quit()
它的作用是打开一个图像,然后将其复制到与原始(图像)不同的表面(冲浪)。 tree.png 部分透明,尤其是 x:0,y:0。当我复制时,如果 x 为 0 且 y 为 0 那么我将打印出原始图像的颜色值和新表面的颜色值。但问题是,每当我复制表面时,alpha 总是更改为 255,使其成为非透明图像。我认为使用 convert_alpha
会保存正确的 alpha 值(它是针对原始图像,而不是新表面)。有解决办法吗?
问题不是由 image
Surface 引起的,而是由 surf
Surface 引起的。从 PNG 文件创建的 Surface 具有每像素 alpha 格式。但是,您必须通过指定 SRCALPHA
标志来创建具有每像素 alpha 格式的目标 Surface
:
surf = pygame.Surface([1024,1024])
surf = pygame.Surface([1024,1024], pygame.SRCALPHA)
或者,您可以更改 Surface 的像素格式,包括每个像素的 alpha convert_alpha
:
surf = pygame.Surface([1024,1024]).convert_alpha()
我有这个代码:
import pygame, sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([100,100,100])
pygame.display.flip()
image = pygame.image.load("tree.png").convert_alpha()
surf = pygame.Surface([1024,1024])
for y in range(0,1024):
for x in range(0,1024):
surf.set_at((x,y), image.get_at((x,y)))
if x == 0 and y == 0:
print image.get_at((x,y))
print surf.get_at((x,y))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill([100,100,100])
screen.blit(surf, [0,0])
pygame.display.flip()
pygame.quit()
它的作用是打开一个图像,然后将其复制到与原始(图像)不同的表面(冲浪)。 tree.png 部分透明,尤其是 x:0,y:0。当我复制时,如果 x 为 0 且 y 为 0 那么我将打印出原始图像的颜色值和新表面的颜色值。但问题是,每当我复制表面时,alpha 总是更改为 255,使其成为非透明图像。我认为使用 convert_alpha
会保存正确的 alpha 值(它是针对原始图像,而不是新表面)。有解决办法吗?
问题不是由 image
Surface 引起的,而是由 surf
Surface 引起的。从 PNG 文件创建的 Surface 具有每像素 alpha 格式。但是,您必须通过指定 SRCALPHA
标志来创建具有每像素 alpha 格式的目标 Surface
:
surf = pygame.Surface([1024,1024])
surf = pygame.Surface([1024,1024], pygame.SRCALPHA)
或者,您可以更改 Surface 的像素格式,包括每个像素的 alpha convert_alpha
:
surf = pygame.Surface([1024,1024]).convert_alpha()