设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2840|回复: 4
打印 上一主题 下一主题

[讨论] 有关GIF数据的长度可变LZW算法

[复制链接]

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

跳转到指定楼层
1
发表于 2014-7-30 17:39:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 余烬之中 于 2014-7-30 17:49 编辑

据说在这个区必须@,否则几个月也难被注意到
@晴兰 @fux2 @taroxd @喵呜喵5 @VIPArcher

最近突然想在RGSS中实现播放gif文件,大概的思路是新建类GIF读取文件并解压成一串Bitmap,然后添加Sprite对GIF的支持,后面这个应该没什么问题,只是在GIF压缩算法上还有点疑问

搞了两个下午,标准的LZW算法倒是已经实现了:Github,应该没有问题

对GIF的数据结构分析也完成了(大部分),只剩下图像数据块和文本数据块并没有进行Bitmap的建立(也就是难在这里了),目前的进度:Github

希望是纯ruby实现

相关资料,链接

问题就是,ruby读取文件都是按字节读取,在这里就必须反编译为编码流,然后再应用长度可变LZW解压
另外长度可变LZW解压现在也暂时没有去实现,如果不能反编译的话实现了也没有什么意义

还有一个问题就是,读取出并解压了后,可以对照颜色表光栅数据什么的,应该如何建立Bitmap对象

另外还有这个,讲述解压缩的:链接

不太清楚四个通道指的是什么(具体操作)
当然 在解压缩之前 不管几个通道都是废话 所以还是要先专注在第一个问题

点评

因为完全看不懂所以我就把这个帖子当成一个预告帖唉嘿(。◕∀◕。)  发表于 2014-8-6 23:26
因为完全看不懂所以我就把这个帖子当成一个预告帖唉嘿(。◕∀◕。)  发表于 2014-7-31 07:30
因为完全看不懂所以我就把这个帖子当成一个预告帖唉嘿(。◕∀◕。)  发表于 2014-7-30 19:49
因为完全看不懂所以我就把这个帖子当成一个预告帖唉嘿(。◕∀◕。)  发表于 2014-7-30 17:57
因为完全看不懂所以我就把这个帖子当成一个预告帖唉嘿(。◕∀◕。)  发表于 2014-7-30 17:54
萌新瑟瑟发抖
看到我请叫我去干活

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21656
在线时间
9416 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2014-7-30 17:42:38 | 只看该作者
四个通道就是RGB以及Alpha吧?

点评

而且之前已经读取出来了颜色表 这里只需要确定每一个像素颜色的索引值就可以了  发表于 2014-7-30 17:46
可是他说创建四个通道(pass)保存数据,每个通道提取不同行的数据,但是源数据解压缩出来是连续的 不存在行  发表于 2014-7-30 17:46
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

3
发表于 2014-7-30 19:04:47 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42367
在线时间
7601 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

4
发表于 2014-7-30 19:12:11 | 只看该作者
某截图脚本以及柳之一的bitmap类marshal范例演示了如何将bitmap对象的data塞到RM的bitmap里面。

点评

那个我看到过 所以现在的问题就是如何从gif解压建立bitmap了  发表于 2014-7-30 19:23
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
5
发表于 2014-7-30 19:51:55 | 只看该作者
本帖最后由 satgo1546 于 2014-7-31 18:07 编辑

把GIF的每一个像素计算出来然后一个个像素地set_pixel……
话说有个gem叫做chunky_png
LZ是要做个chunky_gif的节奏……
反正我每次读这种二进制文件结构都是失败的我也不掺合了……
我注意到了这个帖子嗯。
还有LZ你不是离开了吗?难道某个时候已经到了?(如果是我记错了请无视

@余烬之中 也许我还需要科普一下……
为了让用户在浏览器里看图片的时候不是从上到下一行行看见图片,出现了交错的图像,这样的话像素的顺序就是第二段引用中的顺序了。
数据传输过程是先传通道1,然后通道2,……,然后通道4。
第0次收到数据:为数据开始符,切换到GIF处理器来接收数据。
第1次收到数据:为通道1,因为是第1次,计算出对应的行数为0。于是往图像中的第0行填色。
第2次收到数据:为通道1,因为是第2次,计算出对应的行数为8。于是往图像中的第8行填色。
第3次收到数据:为通道1,因为是第3次,计算出对应的行数为16。于是往图像中的第16行填色。
第4次收到数据:为通道2,因为是第1次收到通道2的数据,计算出对应的行数为4。于是往图像中的第4行填色。
第5次收到数据:为通道2,因为是第2次收到通道2的数据,计算出对应的行数为12。于是往图像中的第4行填色。
……
……
……
第20次收到数据:为通道4,因为是第9次收到通道4的数据,计算出对应的行数为17。于是往图像中的第17行填色。
第21次收到数据:为通道4,因为是第10次收到通道4的数据,计算出对应的行数为19。于是往图像中的第19行填色。
第22次收到数据:为数据终止符,此时图像已经完全被颜色充满,完成数据传输。
实际上并非一定传输23次,不过一般会将数据当作23次……

点评

确实可以这样。先判断是否为交错,然后分情况处理。  发表于 2014-7-31 20:18
所以读取的时候应该顺序读取然后分通道再编织就可以重建了……这样?  发表于 2014-7-31 20:04
问题就在计算像素……gif都是经过压缩加密的(据说jpg的压缩算法更难 管他呢)  发表于 2014-7-30 20:05
这段时间短期回来 至少还能维持半个月 但最多不会超过二十五天了  发表于 2014-7-30 20:04

评分

参与人数 1星屑 +100 收起 理由
恐惧剑刃 + 100 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-20 13:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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