gif透明色相关

众所周知,GIF文件的像素使用8位位图来表示,8位位图有一个调色板,调色板包含8位颜色即256中颜色,图片数据只存储调色板的各种颜色的下标,在显示时图片的某个像素时通过下标在调色板中找到该下标的颜色即为该像素的颜色。

那么有很多GIF支持局部透明是怎么实现的呢?我们在程序中应该怎么处理来获得像素的透明信息呢?

其实,在我们解析完GIF后,发现每一帧数据里包含一个背景色的字段,这个背景色也是使用调色板中的颜色,这个字段只是该帧的调色板的某个下标。比如255,说明背景色是panel【255】,那么在透明的gif处理的时候我们把图片数据中所有颜色获取到,然后只要某个像素的颜色等于panel[255]那么就代表这个像素是完全透明的。实则不然,通过实现我发现有很多部分显示不正确,不该透明的地方被透明了。后来经过了解和尝试,发现所谓透明色,不是说把调色板中的像素颜色拿来比较,而是调色板的下标之间的比较。

因为调色板中的颜色不一定256种颜色都是各不相同的,有很多颜色都是重复的,比如会出现下标是255的颜色会跟100的颜色完全相同。某个像素是否透明应该根据该像素数据的调色板下标来确定。比如背景色字段是255,而图片某个像素的下标也是255那么这个像素透明,某个像素下标是100,它代表的颜色即使跟背景色完全相同它也是不透明的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值