Подтвердить что ты не робот

Как разбить PNG с некоторой прозрачностью на поверхности в Pygame?

Я пытаюсь разбить изображение PNG на поверхность, но прозрачная часть изображения по какой-то причине становится черной, вот простой код:

screen = pygame.display.set_mode((800, 600), pygame.DOUBLEBUF, 32)

world = pygame.Surface((800, 600), pygame.SRCALPHA, 32)
treeImage = pygame.image.load("tree.png")

world.blit(treeImage, (0,0), (0,0,64,64))
screen.blit(world, pygame.rect.Rect(0,0, 800, 600))

Что мне нужно сделать для решения проблемы? Изображение имеет альфа-прозрачность, я открыл его в PhotoShop, и фон становится прозрачным, а не черным или белым или любым другим цветом.

Спасибо за вашу поддержку:)

4b9b3361

Ответ 1

http://www.pygame.org/docs/ref/image.html рекомендует:

Для альфа-прозрачности, например, в .png изображениях, используйте метод convert_alpha() после загрузки, чтобы изображение имело прозрачность пикселя.

Ответ 2

Вы не перевернули doublebuffer.

import pygame
from pygame.locals import Color

screen = pygame.display.set_mode((800, 600))

treeImage = pygame.image.load("tree.png").convert_alpha()

white = Color('white')

while(True):
    screen.fill(white)
    screen.blit(treeImage, pygame.rect.Rect(0,0, 128, 128))
    pygame.display.flip()

Это должно работать для вашей проблемы.

Ответ 3

Ваш код выглядит так, как будто он должен быть правильным. Библиотека SDL не поддерживает альфа-блины, как это, но Pygame добавила поддержку для нее некоторое время назад. В Pygame 1,8 поддержка была добавлена ​​для пользовательских режимов смешивания, и мне интересно, удалил ли этот отпечаток внутренний альфа-альфа-блиттер Pygame?

Увы, потребуется дальнейшее расследование.