微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame Surface.set_at 是否将 alpha 设置为 255?

如何解决Pygame Surface.set_at 是否将 alpha 设置为 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])

    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 表面引起的。从 PNG 文件创建的 Surface 具有每像素 Alpha 格式。但是,您必须通过指定 SRCALPHA 标志来创建具有每像素 Alpha 格式的目标 Surface

surf = pygame.Surface([1024,1024])

surf = pygame.Surface([1024,1024],pygame.SRCALPHA)

或者,您可以使用 convert_alpha 更改 Surface 的像素格式,包括每像素 alpha:

surf = pygame.Surface([1024,1024]).convert_alpha()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。