2009-07-11 10 views
1

ビデオを作成するためにキャプチャしてレンダリングしている一連のjpg画像があります。ビデオを作るためにC#で画像のシーケンスをレンダリングする

私はJpegBitmapDecoderを使用してMemoryStreamからイメージを解凍し、イメージコントロールにソースを設定してレンダリングしています。これはうまくいくようですが、プロセッサのオーバーヘッドはかなり高いです。画像は1280x720で、30fpsで動作しており、私のコンピュータ(Dual Core 2.8Ghz)にほとんど追いつくことができません。より高い解像度で走っていると、フレームが捨てられる。私はCPU使用率を下げるようにしたいと思います。

ほとんどの時間は、デコード(私のマシン上でのデコードのみの単純なベンチマークでは、約40fpsのデコードが可能であることを示しています)に費やされています。誰もが、より速いデコーダがあるかどうか知っていますか(DirectX?DirectShow?ビデオカードに何かをロードすることができますか?)

レンダリングに関しては、Imageコントロールがこのタイプの使用のために設計されているようには見えません(私は実際にそれがまったく働いて驚いた、私はそれが簡単だったので、私はそれを試した)。より速いかもしれない個々のフレームをレンダリングする別の方法がありますか?

+0

代わりに、jpgの名前を順番に指定し、VirtualDubで最初のファイルを開き、ビデオとして再生することもできます。 –

+0

私はもっとはっきりしていたはずです。私は画像をストリーミングしており、ストリーミングされた画像からライブビデオを再生したいと考えています。 – Dolphin

+0

どのような方法でJPEG画像をストリーミングするのですか?私はほぼ同じことを試みており、BinaryFormatterを使ってMemoryStreamをカプセル化して送信しています。より良い方法があるのだろうかと思います。 – geometrikal

答えて

1

jpegのデコードとサイズ変更の両方が同時に行われているようです。サイズ変更も高価になる可能性があります。デコードとサイズ変更(最も安いアルゴリズムを使用して)jpegを分離してみてください。解凍するには「JPEG_FAST」とFreeImageのようなものを使用し、サイズを変更するには「FILTER_BOX」を使用します。

表示のため、TinyPTCはシンプルで高速です。 (DirectDrawのラッパー)これはCですが、参照できるDLLにラッパーを記述してコンパイルするのは簡単です。

+0

リサイズは素晴らしいですが、必要はありませんが、ほとんどの場合、ネイティブ解像度を使用します。私はFreeImageを見て、もっと速くデコードするかどうかを調べる必要があります。 – Dolphin

+0

JPEG_FASTの方がはるかに高速です(私の単純なベンチマークでは約50%高速です)、それが受け入れられるかどうかを確認するためには、mondayの品質を調べる必要があります。 – Dolphin

関連する問題