我在各种尺寸(大尺寸,如100x100)的棋盘上有骑士游览的算法,我想为结果制作动画。每当骑士移动到一个新的方块时,(方形)画布中的相应像素将改变颜色,直到最终整个画布被着色。所得到的电影将可在网页上查看有关算法的信息。
如果我想要广泛的浏览器支持,动画GIF似乎是最好的方法(尽管欢迎其他建议)。使用它的最佳工具或库是什么?我很高兴使用Linux或Mac计算机上免费提供的任何东西。
实际的算法太长了,无法在这里做一个有用的例子(如果你真的很好奇的话,请参阅this paper)但这里是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")
额外信用问题:我们可以利用这部电影的特殊功能来减小文件大小吗? Wikipedia article建议我们可以这样做,如果我们只改变一些像素 - 事实上我们每帧只改变一个!
答案 0 :(得分:4)
您可以使用giflib来完成此操作。文档在下载中。
例如,this page包含使用giflib创建的GIF动画和用于生成动画的程序的源代码。可能有助于了解如何使用giflib进行动画制作。
编辑:另一种选择,如果您不介意进行一些后处理,只需使用简单格式(such as PPM)然后make the animated gif using ImageMagick输出您的帧。
至于您的额外信用问题:ImageMagick甚至可以frame comparisons为您缩小输出的大小。
答案 1 :(得分:0)
为了回应您的额外信用问题,您可以通过仅在新框架上绘制图像的已更改部分并将其余部分设置为透明来自行完成此项改进。