Python 为什么我的图像周围有一条粗黑线?

Python 为什么我的图像周围有一条粗黑线?,python,pygame,Python,Pygame,在Pygame中,我编写了一个扫雷舰克隆。但是,当我在最后一张图片中显示你输了或你赢了时,我得到了以下结果: 我相信你会注意到文本周围有一条粗黑线。以下是将图像快速显示到窗口的功能: def play(): SIZE = (WIDTH, HEIGHT) = (16, 16) MINES = 40 PIXELS_PER_CELL = 30 pygame.init() screen = pygame.display.set_mode((WIDTH * PIX

在Pygame中,我编写了一个扫雷舰克隆。但是,当我在最后一张图片中显示你输了你赢了时,我得到了以下结果:

我相信你会注意到文本周围有一条粗黑线。以下是将图像快速显示到窗口的功能:

def play():
    SIZE = (WIDTH, HEIGHT) = (16, 16)
    MINES = 40
    PIXELS_PER_CELL = 30
    pygame.init()
    screen = pygame.display.set_mode((WIDTH * PIXELS_PER_CELL,
                                      HEIGHT * PIXELS_PER_CELL))
    pygame.display.set_caption("PyMines")
    board = create_board(SIZE, MINES)
    board.draw(screen)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif (event.type == pygame.MOUSEBUTTONDOWN and board.is_playing and
                  not board.is_solved):
                board.mouse_handler(event, screen)

        message = None
        if not board.is_playing:
            board.show_mines(screen)
            message = pygame.image.load("images/lose.png").convert_alpha()
        elif board.is_solved:
            message = pygame.image.load("images/win.png").convert_alpha()

        if message:
            message = pygame.transform.scale(message, (screen.get_width(),
                                                       screen.get_height() //
                                                       5))
            screen.blit(message, (0, 0))
        pygame.display.update()
由于我不确定您应该查看的代码的哪一部分是完整代码

我认为这种行为如此奇怪的另一个原因是,当我第一次创建PyMines时,图像以如此完美的方式闪烁(如您所见,文本上有一个非常轻微的阴影):

然而,这并不是一个优化版本,因为在每个周期后,整个电路板都会被重新绘制(因此,如第一幅图所示,在16x16电路板上需要很长时间,所以我使用了9x9,但结果是相同的)。以下是原始版本的
play()
函数:

def play():
    SIZE = (WIDTH, HEIGHT) = (9, 9)
    MINES = 10
    PIXELS_PER_CELL = 30
    pygame.init()
    screen = pygame.display.set_mode((WIDTH * PIXELS_PER_CELL,
                                      HEIGHT * PIXELS_PER_CELL))
    pygame.display.set_caption("PyMines")
    board = create_board(SIZE, MINES)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif (event.type == pygame.MOUSEBUTTONDOWN and board.is_playing and
                  not board.is_solved):
                board.mouse_handler(event, screen)

        message = None
        if not board.is_playing:
            board.show_mines()
            message = pygame.image.load("lose.png").convert_alpha()
        elif board.is_solved:
            message = pygame.image.load("win.png").convert_alpha()

        board.draw(screen)
        if message:
            message = pygame.transform.scale(message, (screen.get_width(),
                                                       screen.get_height() //
                                                       5))
            screen.blit(message, (0, 0))
        pygame.display.update()
我会附加一个完整代码的链接,但是pastebin已经关闭,没有奇怪的黑线的原始游戏的完整代码也关闭了

编辑:我已经尝试删除了
convert\u alpha()
并添加了
convert()
,甚至什么都没有

.convert()

什么都没有


为什么所有这些黑线都在那里,我如何去除它们,我应该使用哪个版本(
convert
/
convert\u alpha
/无任何内容)。

文本有一个带alpha通道的黑色阴影。在原始版本中,渲染电路板,然后渲染文本,阴影与电路板混合

在修订版本中,渲染棋盘,然后在其上重复渲染文本。在第一个过程中,它正确渲染,阴影与电路板混合。在第二个过程中,阴影与已渲染的阴影混合,形成稍暗的阴影。在下一个过程中,阴影会稍微变暗,以此类推


如果不严格控制混合内容,就无法使用alpha混合。每次渲染文本时,如果不是整个棋盘,至少需要渲染文本后面的棋盘部分。

问题似乎在于
pygame.image.load(“images/lose.png”).convert_alpha()
。表示加载的图像可能会被更改。您应该改用
.convert()
方法。@ashishnitinpail已经尝试过了,它会创建一个坚实的黑色背景,而将
convert()
完全删除会创建一条污浊的黑色线条可能是在
transform.scale()
期间创建的。创建具有预期大小的图像。我可以在
transform.scale()
之前查看图像吗?也许原始图像在文本周围有一个黑色的细轮廓,并且该轮廓按比例展开。