2009-06-03 3 views
5

私はさまざまなサイズのチェス盤(100x100のような大きなサイズ)でナイトのツアーのアルゴリズムを持っており、結果をアニメートしたいと思います。ナイトが新しい正方形に移動するたびに、正方形キャンバス内の対応するピクセルが色を変え、最終的にキャンバス全体が色づけされます。結果のムービーは、アルゴリズムについてのWebページで表示できます。アルゴリズムを使用してアニメーションGIFを作成する最善の方法は何ですか?

広範なブラウザサポートが必要な場合は、アニメーションGIFが最良の方法のようです(他の提案も歓迎です)。これを行うための最良のツールやライブラリは何ですか?私はLinuxやMacのコンピュータで自由に利用できるものを使用して幸せです。

実際のアルゴリズムは、(あなたが本当に興味があればthis paperを参照)、ここで有用な例を作るにはあまりにも長いですが、ここでは8×8ボード上の(退屈)王のツアーのための擬似コードです:

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は、ピクセルの一部だけを変更している場合には、これを行うことができる可能性があることを示唆しています。実際、フレームごとに1つずつ変更しています。

+0

アニメーションGIFは使用しないでください。代わりにムービー形式に変換すると、圧縮率ははるかに高くなります –

+0

どのような形式をお勧めしますか、それを作成するツールは何ですか? –

+0

圧縮レベルは多くのことに依存します。単純な画像の場合、gifはうまくいくでしょう。また、サイズはシンプルさほど問題ではないかもしれません。アニメーションGIFは素晴らしい技術ではありませんが、うまくサポートされています。 – Naaff

答えて

4

giflibを使用してこれを達成できます。ドキュメントはダウンロード中です。

例として、this pageには、アニメーションを生成するために使用されるプログラムにgiflibとソースコードを使用して作成されたアニメーションgifが含まれています。アニメーションのためにgiflibを使用する方法を理解するのに役立つかもしれません。

編集:別の方法として、あなたには、いくつかの後処理を気にしない場合は、単に出力あなたのフレームを、単純な形式(such as PPM)、その後make the animated gif using ImageMagickを使用しています。

余分な信用問題については、ImageMagickはframe comparisonsでも出力のサイズを小さくすることができます。

+1

ありがとうございます。あなたの2番目の選択肢を考えています:Python Image Libraryを使って.gifのコレクションを描画し、次にImageMagickを使って(最適化された)アニメーションにまとめることを考えています。 –

0

余分な信用問題に答えるには、変更した部分の画像を新しいフレームに描画し、残りの部分を透明にするだけで、この改善を自分で行うことができます。

+0

入手しました。 ImageMagickが私のために比較と最適化を行うようだが、それがうまくいかないようなら手動で行うことができる。 –

関連する問題