0

私がこれを正しい方法でやっているかどうか私は懐疑的です。

約60fpsでアニメーションを再生する必要があります。List<Image>初期化時にすべてのフレームをロードするためにを使用しています。次に、を使用して10ミリ秒System.Timers.Timerごとにイベントを呼び出します。これにより、の画像が変更されます。pictureBox

List<Image> imageList = new List<Image>();

private static Timer_Event(o, e)
{
    pictureBox.Image = imageList[i++];
}

だから、私はこれを正しくやっていますか?より良いアプローチはありますか?

4

4 に答える 4

2

あなたが説明していることは、頑強に機能する可能性は低いようです。簡単な要約は次のとおりです。

  • 私の経験では、タイマーは一般的に正確ではありません。タイマーメッセージはWindowsメッセージポンプを通過するため、WindowsUIがメッセージを処理する速度でしか移動できません。メッセージを妨害するアプリケーションはタイマーを途切れさせますが、注意深い作業でこれを防ぐことができます。ここでのタイマーに関するいくつかの古典的な議論:ダミーのためのWinformsタイマー

  • 一般に、リストは画像を保存するための非常に非効率的な方法です。1秒あたり60フレームの1秒間のアニメーションの場合、60枚の画像をメモリに保持し、それぞれを個別に解凍する必要があります。

考えられる解決策とそれに伴うトレードオフを次に示します。

フルモーションビデオ

MediaElementフォームにフルモーションビデオを表示する場合は、 (WPFアプリケーションの場合:http ://www.c-sharpcorner.com/uploadfile/dpatra/media-element-in-wpf/ )の使用を検討する必要があります。またはMediaPlayerオブジェクト(WinFormsアプリケーションの場合:http://msdn.microsoft.com/en-us/library/bb383953(v = vs.90 .aspx )。

これにより、非常に高品質の画像、さまざまな圧縮を含む長いビデオを再生し、再生を任意に開始または停止することができます。ただし、フルビデオプレーヤーの起動とメモリ使用量の要件は、画面に1つの画像を表示するだけではありません。アプリケーションがビデオサブシステムを初期化するのに少し時間がかかることがわかりますが、これは煩わしいかもしれません。

アニメーション画像

WindowsフォームまたはWPFのピクチャーボックスにアニメーション画像を表示することができます。通常はGIFアニメーションファイルを使用して、アニメーション画像を生成するだけです。これは、ほとんどの単純なアニメーションでスムーズに機能し、次のようなWebサイトから無料で使用できるアニメーションGIFを取得できます。http: //www.chimply.com/Generator

フォームにアニメーションGIFを配置する方法のウォークスルーは次のとおりです。http://trompelecode.com/2010/12/animated-progress-indicator-in-csharp-windows-forms/

スプライトアニメーション

各画像を正確に表現する必要があり(単に魅力的に見せようとしている場合は必要ありません)、ビデオシステムのオーバーヘッドは必要ないとします(これは、再生するだけの場合は問題ありません)。 1〜2秒分のアニメーション)。次に、単一の合成「スプライト」イメージを作成します。これにより、アプリケーションのメモリオーバーヘッド要件が軽減され、ファイルの解凍にかかる時間が短縮されます。

たとえば、PNGスプライトを生成するWebサイトは次のとおりです。http ://wearekiss.com/spritepad

スプライトを使用して画像を生成したら、それを画像ボックス内に配置し、画像ボックス内の画像の相対位置を変更して画像をアニメーション化できます。これを実現する方法のウォークスルーは次のとおりです。オフセット付きのC#画像ボックスロード画像

概要

アニメーション画像の表示を選択する方法には、いくつかのトレードオフがあります。私は自分のために可能な限り最も単純な解決策を選ぶのが好きです-そして私の場合、私はアニメーションGIF画像を使うのが好きです。アニメーションで頑張ってください!

于 2012-09-04T16:23:37.153 に答える
0

それ以外の場合は.aviが代わりになりますが、おそらくスレッド/タイマーを利用するよりも多くの画像がある場合は、明らかに前進するようです。

于 2012-09-04T16:21:07.987 に答える
0

最も簡単な方法は、そのpictureBoxでアニメーションGIFを使用し、タイマーをいじらないことです。

于 2012-09-04T16:25:11.757 に答える
0

また、 WPFまたはSilverlightを使用してアニメーションをまとめることができる場合もあります...アニメーションをインタラクティブにするか、プログラムで制御できるようにする必要がある場合は、おそらくそれが最善の方法です。

一方、アニメーションコンテンツが静的である場合は、AVI(またはMPEGなど)がおそらく最善の策です。

あなたはあなたが達成しようとしていることを正確に言っていないので、私には確信が持てません。

于 2012-09-04T16:34:37.290 に答える