【问题标题】:png images with transparent background don't work in pygame 2.0.0 [duplicate]具有透明背景的png图像在pygame 2.0.0中不起作用[重复]
【发布时间】:2021-04-24 21:56:15
【问题描述】:

当我将具有透明背景的 png 图像加载为精灵图像时,它上面有非常奇怪的背景。我使用 Photoshop 绘制图像。

另外,还有一个错误:libpng 警告:iCCP:已知不正确的 sRGB 配置文件

只有在我关闭 pygame 窗口时才会出现。

我在下面附上了我的代码、png 图像和它是如何工作的屏幕截图。

import os
import pygame

FPS = 50
WIDTH, HEIGHT = 500, 500

pygame.init()

size = width, height = WIDTH, HEIGHT
screen = pygame.display.set_mode(size)

all_sprites = pygame.sprite.Group()
player_group = pygame.sprite.Group()


def load_image(name, color_key=None):
    fullname = os.path.join('textures', name)
    try:
        image = pygame.image.load(fullname).convert()
    except pygame.error as message:
        print('Cannot load image:', name)
        raise SystemExit(message)

    if color_key is not None:
        if color_key == -1:
            color_key = image.get_at((0, 0))
        image.set_colorkey(color_key)
    else:
        image = image.convert_alpha()
    return image


class Player(pygame.sprite.Sprite):
    def __init__(self, pos_x, pos_y):
        super().__init__(player_group, all_sprites)
        self.image = pygame.transform.scale(load_image('baloon.png', 1), (42, 94))

        self.rect = self.image.get_rect().move(pos_x, pos_y)

    def update(self, *args):
        pass


clock = pygame.time.Clock()
player = Player(200, 200)
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    screen.fill(pygame.Color("#AAAAAA"))
    all_sprites.draw(screen)

    all_sprites.update()
    pygame.display.flip()
    clock.tick(FPS)
pygame.quit()

baloon.png

this is how does it seen

【问题讨论】:

    标签: python pygame png


    【解决方案1】:

    PNGs 具有每个像素的 alpha。无需设置颜色键。只需blit 油箱上的保护装置。 convert() 将像素格式更改为每个像素没有 alpha 的格式并删除透明度信息。请改用convert_alpha()

    class Player(pygame.sprite.Sprite):
        def __init__(self, pos_x, pos_y):
            super().__init__(player_group, all_sprites)
            slef.image = pygame.image.load('baloon.png').convert_alpha()
            self.image = pygame.transform.scale(slef.image, (42, 94))
    


    我建议修改load_image函数:

    def load_image(name, per_pixel_alpha = False, color_key = None):
        fullname = os.path.join('textures', name)
        try:
            image = pygame.image.load(fullname)
        except pygame.error as message:
            print('Cannot load image:', name)
            raise SystemExit(message)
    
        if per_pixel_alpha:
            image = image.convert_alpha()
        else:
            image = image.convert()
    
        if color_key is not None:
            if color_key == -1:
                color_key = image.get_at((0, 0))
            image.set_colorkey(color_key)
       
        return image  
    
    class Player(pygame.sprite.Sprite):
        def __init__(self, pos_x, pos_y):
            super().__init__(player_group, all_sprites)
            self.image = pygame.transform.scale(load_image('baloon.png', True), (42, 94))
    
            self.rect = self.image.get_rect().move(pos_x, pos_y)
    
        def update(self, *args):
            pass 
    

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 2012-12-19
      • 2010-12-14
      • 2017-07-31
      • 2012-05-26
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      相关资源
      最近更新 更多