2009-10-27 7 views
11

Ich versuche, ein PNG-Bild auf eine Oberfläche blitten, aber das transparente Teil des Bildes stellt sich aus irgendeinem Grund schwarz, hier ist der einfache Code:Wie blit ich ein PNG mit etwas Transparenz auf eine Oberfläche in Pygame?

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

Was muss ich tun, um das Problem zu lösen ? Das Bild hat Alpha-Transparenz, ich habe es in Photoshop geöffnet und der Hintergrund wird transparent, nicht schwarz oder weiß oder eine andere Farbe.

Vielen Dank für Ihre Unterstützung :)

Antwort

21

http://www.pygame.org/docs/ref/image.html empfiehlt:

Für Alpha-Transparenz, wie in .png Bilder verwenden, um die convert_alpha() Methode nach dem Laden, so dass das Bild pro Pixel Transparenz aufweist.

+1

pygame.image.load hat bereits Alpha, wenn es aus einem Bild mit Alpha geladen wird. –

+2

@PeterShinners eigentlich, ruft 'convert()' oder 'convert_alpha()' ist immer noch bevorzugt, da dies nicht bedeutet, dass Blitze alle Pixelformatkonvertierung erfordern, die extrem langsam ist. – congusbongus

0

Ihr Code sieht so aus, als müsste er korrekt sein. Die SDL-Bibliothek unterstützt Alpha-zu-Alpha-Blitting nicht, aber Pygame hat sie vor einiger Zeit unterstützt. In Pygame 1.8 wurde die Unterstützung für benutzerdefinierte Füllmethoden hinzugefügt, und ich frage mich, ob das den internen Alpha-zu-Alpha-Blitter von Pygame entfernt hat?

Leider sind weitere Untersuchungen erforderlich.

7

Sie haben den Doppelbuffer nicht umgedreht.

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

Dies sollte für Ihr Problem funktionieren.

Verwandte Themen