首页 > 解决方案 > 如何在pygame中无背景的blit图像

问题描述

在此处输入图像描述

我想在 pygame 表面上只对这个图像的绿色三角形进行 blit。

我的代码:

import pygame

win = pygame.display.set_mode((800,800))
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    win.fill((255,255,255))
    Image = pygame.image.load('sample.jpg').convert()
    Image.set_colorkey((0,0,0))
    win.blit(Image,(80,80))
    pygame.display.update()

pygame.quit()

在此处输入图像描述

当我运行该代码时,它会像这样 blit 图像。

我怎样才能做到这一点?

标签: pythonpython-3.xpygame

解决方案


不幸的是,pygame 在颜色过滤方面做得不好。相反,您可以尝试对具有内置 alpha 透明度的 png 图像进行 blit,您可以使用 GIMP 或 Photoshop 等工具来制作透明图像。但是如果你有很多图像并且你想自动完成这个过程,你可以使用 opencv 无缝过滤颜色;这是一个很好的教程:

https://realpython.com/python-opencv-color-spaces/

过滤指定颜色后,还可以使用形态学运算来达到更好的效果: https ://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html


推荐阅读