質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1645閲覧

AForge AVIReaderにて、動画を再生したいです。

mypace

総合スコア45

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/02/26 02:48

Windows 10 (64bit)
Visual Studio 2017
言語 C#
を使用しております。

C#にてAForge AVIWriterにて動画(.avi)を作成し、
今度はAVIReaderにて動画の再生を行いたいです。

pictureBoxを使用し、.aviファイルから画像を読み込み、
読み込んだ画像をpictureBox.imageとして表示を行おうとしましたが、
表示された画像は一番最後のフレーム画像だけになりました。

pictureBoxを使用して動画を再生する方法を押していただきたく思います。
また、AVIWriter使用時 VideoSourcePlayerコントロールを使用していますので、
pictureBoxを使用せず、VideoSourcePlayerコントロールを使用し動画を再生することが
可能でしたら、その使用方法についてアドバイスをいただきたく思います。

C#

1 private void MoviePlayButton_Click(object sender, EventArgs e) 2 { 3 4 OpenFileDialog openFileDialog = new OpenFileDialog(); 5 6 if(moviePath == "") 7 { 8 openFileDialog.InitialDirectory = mainFolderPath; 9 openFileDialog.Filter = "(*.avi;*.mpg;*.wmv)|*.avi;*.mpg;*.wmv|すべてのファイル|*.*"; 10 } 11 else 12 { 13 openFileDialog.InitialDirectory = moviePath; 14 } 15 16 if (openFileDialog.ShowDialog() == DialogResult.OK) 17 { 18 19 AVIReader reader = new AVIReader(); 20 Bitmap readImage; 21 22 try 23 { 24 reader.Open(openFileDialog.FileName); 25 while (reader.Position - reader.Start < reader.Length) 26 { 27 //画像表示 28 readImage = reader.GetNextFrame(); 29 pictureBox1.Image = readImage; 30 } 31 } 32 catch (Exception ex) 33 { 34 MessageBox.Show(ex.ToString(), "Movie read error", MessageBoxButtons.OK, MessageBoxIcon.Error); 35 } 36 37 reader.Close(); 38 39 } 40 41 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

AForgeは使ったことがないので、判りそうなところだけ。

pictureBox.Imageに画像をセットしても、実際に描画されるのは別のタイミング(大抵は暇な時)ですので、結果的に最後のフレームしか表示されないのだと思います。

試してはいませんが、pictureBox.Imageセット後にpictureBox.Refresh();を呼び出すとどうでしょうか?
これで強制再描画が掛るはずです。

投稿2019/02/27 02:45

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mypace

2019/02/27 03:21

ありがとうございます。 PictureBoxで動画を再生できました。 ただ、とても描画スピードが速いため、以下のようにwaitをいれたのですが、同じになりました。 いい方法があればアドバイスをいただきたく思います。 //frameLate 30fps TimeSpan taskFramelata = TimeSpan.FromMilliseconds( 1 / usbCamFramerate); reader.Open(openFileDialog.FileName); while(reader.Position - reader.Start < reader.Length) { readImage = reader.GetNextFrame(); Task.Delay(taskFramelata); //msec => 1000msec->1sec pictureBox1.Image = readImage; pictureBox1.Refresh(); }
takabosoft

2019/02/27 04:34

それをやるんでしたら、Thread.Sleepの方を使ってください。
mypace

2019/02/27 08:05

ありがとうございます。 Thread.Sleepに変更して、再生を確認できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問