Как мне перетянуть PNG с некоторой прозрачностью на поверхность в Pygame? - PullRequest
14 голосов
/ 28 октября 2009

Я пытаюсь перетянуть изображение 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, и фон стал прозрачным, а не черным, белым или другим цветом.

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

Ответы [ 3 ]

25 голосов
/ 28 октября 2009

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

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

7 голосов
/ 11 декабря 2012

Вы не перевернули двойной буфер.

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()

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

0 голосов
/ 06 ноября 2009

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

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

...