21

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で開いたところ、背景が透明になり、黒や白などの色ではなくなりました。

ご支援いただきありがとうございます :)

4

4 に答える 4

27

http://www.pygame.org/docs/ref/image.html の推奨事項:

アルファ透明度の場合、.png 画像のように、convert_alpha()読み込み後にメソッドを使用して、画像がピクセルごとに透明になるようにします。

于 2009-10-28T00:57:06.047 に答える
8

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

これで問題が解決するはずです。

于 2012-12-11T07:57:06.660 に答える
0

あなたのコードは正しいはずです。SDL ライブラリは、このようなアルファからアルファへのブリッティングをサポートしていませんが、Pygame は少し前にサポートを追加しました。Pygame 1.8 では、カスタム ブレンディング モードのサポートが追加されました。これにより、Pygame の内部アルファからアルファへのブリッターが削除されたのでしょうか?

残念ながら、さらなる調査が必要になります。

于 2009-11-06T18:31:29.443 に答える