image-processing - 非常接近于从字节构建未压缩的动画 GIF - 但它有一个我无法检测到的错误
问题描述
我正在 Mathematica 中构建一个程序,它生成非常简单的 GIFS,可以在单色方块之间翻转。它的设计使图像数据未压缩,并且不使用大多数动画 GIF 使用的 LZW 压缩。我遇到过非动画的未压缩 GIF 的示例,它们只是单个图像,并且我遇到过非常简单的动画 gif,它们会改变颜色,但它们确实使用 LZW。我还没有找到未压缩和动画的示例,这就是我想要做的。
到目前为止,我的程序成功地创建了单帧 gif 以及具有多个帧的动画 gif,但是动画 gif 总是为每一帧呈现相同的颜色,或者只是一些像素改变颜色,而不是整个帧。我正在尝试创建循环播放的动画 gif,例如,从红色方块到黑色方块。
下面是我的程序创建的 GIF 的逐块字节。我预计这是 GIF 是一个 2 像素乘 2 像素的正方形,其中第一帧是红色,然后第二帧是黑色。相反,我得到了两帧红色。
标题:47,49,46,38,39,61 逻辑屏幕描述符:02,00,02,00,f0,00,00 全局颜色表:ff,00,00,00,00,00 应用程序扩展块:21 ,ff,0b,4e,45,54,53,43,41,50,45,32, 2e,30,03,01,00,00,00 图形扩展控件:21,f9,04,00,88, 13,00,00 ImageDescriptor:2c,00,00,00,00,02,00,02,00,00 ImageData Block: 01,03,02,01,01,03,02,01,01,00, 图形扩展控制:21,f9,04,00,88,13,00,00 ImageDescriptor:2c,00,00,00,00,02,00,02,00,00, ImageData Block:01,03,02,01 ,01,03,02,01,01,00 评论扩展:21,fe,00,00 预告片:3B
如果您想在十六进制编辑器中查看这些字节,这里是完整的字节串:47,49,46,38,39,61,02,00,02,00,f0,00,00,ff, 00,00,00,00,00,21,ff,0b,4e,45,54,53,43,41,50,45,32,2e,30,03,01,00,00,00,21, f9,04,00,88,13,00,00,2c,00,00,00,00,02,00,02,00,00,01,03,02,01,01,03,02,01, 01,00,21,f9,04,00,88,13,00,00,2c,00,00,00,00,02,00,02,00,00,01,03,02,01,01, 03,02,01,01,00,21,fe,00,00,3B
我目前对问题的思考:LZW 最小大小(图像数据块的第一个字节)或清除代码(图像数据块的第三个字节)是否有问题,因为我发现当我将它们更改为不同的值时,有时会出现一个或两个黑色像素以及 1-2 个红色像素,但我无法找出错误的模式。
我还想知道将背景颜色设置为红色是否让我对错误产生了误导性的理解——实际上可能没有或只有很少的像素被绘制,但我无法判断,因为背景颜色与 as 像素相同颜色?
这是我在 Mathematica 中工作的程序——它有部分评论,但我还没有完成评论:
https://www.wolframcloud.com/obj/8b483039-494b-476f-844d-a0f39d1d663b
最后,这些是我遇到的最好的资源,我的程序是基于这些资源的:
GifLib – Gif 中有什么 http://giflib.sourceforge.net/whatsinagif/index.html
解决方案
推荐阅读
- mysql - 在 SQL 中的链接服务器上使用 OPENQUERY 进行“INSERT IGNORE INTO”时出错
- php - PHP foreach 无法回显值
- c++ - Arduino struct 变量似乎在没有明确重新分配的情况下被重新分配
- javascript - 如何预填充下拉字段
- javascript - 尝试将文本框值添加为表格行
- recursion - 是否可以限制 S3 存储桶中递归目录列表的深度?
- css - chrome 中的 flex-basis 自动
- django - NoModuleName 'channels',但我已经安装了它。姜戈
- node.js - 为什么 Express 应用使用 server.js 和 app.js
- javascript - 如何轻松到达距其后代 12 级的祖先元素?