zowen 发表于 2022-4-7 22:16:31

pygame关于PNG图像set_colorkey后有黑框

学习过程:
1、刚开始学习,作图直接做PNG格式的角色图片,后面发现问题,如果我需要在角色上添加装备或一些简单的变化能不能搞定呢?
        试了下,PNG.bilt(surface,(0,0)),失败,我新作的surface装备不能会知道我的PNG图像上,语法不支持。

2、解决方法,查阅资料后,我决定绘制一个和PNG图片一样大小的新的Surface来作为我的底图,或者说图框,开始动手
        image = pygame.Surface(w, h)
        底图画好了,把我的PNG贴上去吧!
        image.bilt(PNG, (0,0))
        纳尼! 就知道贴完以后透明部分直接变成黑色了,不怕,抠图
        image.set_colorkey(0, 0, 0)
        抠图完成!!!!!!!!!!!!!
      我靠,好出境的大黑边!!!!!!!
3、解决过程,来吧,折腾吧!
        试试填充我的image一个指定颜色,然后在扣呗
        image.fill(255, 255, 255)
        image.bilt(PNG, (0,0))
        image.set_colorkey(255, 255, 0)
        日,大黑边变成了大红边!!!
        我不禁思考,看来是我作图的时候PNG边缘的alpha通道轻微改变了底色的RBG值
        那既然这样,我直接让image这个surface对象填充个透明的底色不就好了!
        对了,之前测试过,用draw方法画的图不能设置透明度,但是surface是可以填充透明度的!,开工
4、解决方案
        PNG = pygame.image.load('PNG.png').convert_alpha()        #导入我的英雄角色,PNG图片
        PNG = pygame.transform.scale(PNGt,(widht, height)).convert_alpha() #把我的PNG设置成需要的大小
        image = pygame.Surface((widht, height))                        #创建一个一样大的surface对象 image
        color_temp = pygame.Color(255, 255, 255, 0)         # 设置颜色和透明度,其实什么颜色已经不重要了,关键是alpha通道的0!
        image.fill(color_temp)                                                #把透明的底色填充进去
        image.bilt(PNG,(0,0))                                                #把我的英雄PNG贴上去
5、测试一下
        完美消除PNG抠图方法产生的大黑框!!!!!
       
       





       
页: [1]
查看完整版本: pygame关于PNG图像set_colorkey后有黑框