5

我有一个用于骑士在各种尺寸(大尺寸,如 100x100)的棋盘上旅行的算法,我想为结果制作动画。每次马移动到一个新的方格时,(方格)画布中的相应像素都会改变颜色,直到最终整个画布都被着色。生成的电影将可用于在有关算法的网页上查看。

如果我想要广泛的浏览器支持,动画 GIF 似乎是最好的方法(尽管欢迎其他建议)。最好的工具或库是什么?我很乐意使用 Linux 或 Mac 计算机上免费提供的任何东西。

实际的算法太长了,无法在这里做一个有用的例子(如果你真的很好奇,请参阅这篇论文)但这里是一个(无聊的)国王在 8x8 板上的旅行的伪代码:

movie = new Movie()
frame = new Frame()
frame.fillRectangle((1,1), 8, 8, BLUE)
for row in [1..8] {
    if (row.isOdd()) { colrange = [1..8] } else { colrange = [8..1] }
    for col in colrange {
        frame.colourPixel(row, col, RED)
        movie.addFrame(frame)
    }
}
movie.saveAsGIF("tour.gif")

额外的问题:我们可以利用这部电影的特殊功能来减少文件大小吗?维基百科的文章表明,如果我们只改变一些像素,我们也许可以做到这一点——事实上,我们每帧只改变一个!

4

2 回答 2

6

您可以使用giflib来完成此操作。文档在下载中。

例如,此页面包含使用 giflib 创建的动画 gif 以及用于生成动画的程序的源代码。了解如何将 giflib 用于动画可能会有所帮助。

编辑:如果您不介意一些后处理,另一种选择是使用简单的格式(例如 PPM)简单地输出您的帧,然后使用 ImageMagick 制作动画 gif

至于您的额外信用问题:ImageMagick 甚至可以为您进行帧比较以减少输出的大小。

于 2009-06-03T21:33:53.460 回答
0

针对您的额外信用问题,您可以通过仅在新框架上绘制图像的更改部分并将其余部分设置为透明来自己进行此改进。

于 2009-06-03T21:38:49.443 回答