2017-07-31 20 views
0

私は数多くの研究を行い、ここで多くの質問を見てきましたが、私を助けるものは何も見つかりませんでした。私はC#、Windowsフォーム、およびSOの新機能を序文にする必要があります。私はC++から来て1年目のCompSciの学生です。私は夏の自分のプロジェクトを試しています。 AForge.Video.FFMPEGビデオファイルリーダーを使用して、.aviから一連のビットマップを表示しようとしています。Picturebox from AForge FFMPEG empty - C#/ WinForms

それはそのデータ(コンソールプリント寸法、フレームレート、およびコーデック)を取得し、ピクチャを作成し、ファイルを見つけているようだ、しかし、ピクチャは空白/空アップします。私は.AVIのフレームからビットマップを取得:

From AForge example code here

それから私は、ピクチャボックスと、それを表示しようとしている:

From MS example code here as well

そしてここでは、私のコードです。基本的に2つの組み合わせ:

public class Simple : Form 
{ 
    Bitmap videoFrame; 

    public Simple() 
    { 
     try 
     { 
      // create instance of video reader 
      VideoFileReader reader = new VideoFileReader(); 
      // open video file 
      reader.Open(@"C:\Users\User\Desktop\ScanTest3.AVI"); 
      // check some of its attributes 
      Console.WriteLine("width: " + reader.Width); 
      Console.WriteLine("height: " + reader.Height); 
      Console.WriteLine("fps: " + reader.FrameRate); 
      Console.WriteLine("codec: " + reader.CodecName); 

      PictureBox pictureBox1 = new PictureBox(); 

      // read 100 video frames out of it 
      for (int i = 0; i < 100; i++) 
      { 
       videoFrame = reader.ReadVideoFrame(); 

       pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
       pictureBox1.ClientSize = new Size(videoFrame.Width, videoFrame.Height); 
       pictureBox1.Image = videoFrame; 

       // dispose the frame when it is no longer required 
       videoFrame.Dispose(); 
      } 

      reader.Close(); 
     } 

     catch 
     { 
      Console.WriteLine("Nope"); 
     } 

    } 
} 

class MApplication 
{ 
    public static void Main() 
    { 
     Application.Run(new Simple()); 
    } 
} 

これはかなりです。たとえ例外がキャッチされていないにもかかわらず、ビデオの最初のフレームがあるはずです(私はtry/catchを非常にうまく使用していますがかなり確信していますが)、コンソールは正しいデータを表示しますファイルの:誰も私を伝えることができればどのよう警告手段、それは同様に素晴らしいことだが、私は主にだけ画面に印刷何ら絵がない理由として失われてい

width: 720 
height: 480 
fps: 29 
codec: dvvideo 
[swscaler @ 05E10060] Warning: data is not aligned! This can lead to a speedloss 

けど。

ありがとうございます!

+0

この「videoFrame.Dispose();」を削除する方法 –

+0

@LeiYangの問題は、 'videoFrame.Dispose();'が削除されても問題は解決しません。私はVideoFileReaderが次のループの次のフレームに移動する必要があると信じます –

+0

forループを使用せず、フレームの1つのみを表示するのはどうですか? –

答えて

0

見つけたThis postここで彼はタイマーを使用して更新し、完全に動作します。私はpictureBoxが関数内で実際に動作するかどうかは確かではないと推測しています。まだ学んでいる。ありがとう!

関連する問題