鱼C论坛

 找回密码
 立即注册
查看: 2189|回复: 0

[技术交流] pygame关于PNG图像set_colorkey后有黑框

[复制链接]
发表于 2022-4-7 22:16:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学习过程:
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抠图方法产生的大黑框!!!!!
       
       





       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表