私は数多くの研究を行い、ここで多くの質問を見てきましたが、私を助けるものは何も見つかりませんでした。私はC#、Windowsフォーム、およびSOの新機能を序文にする必要があります。私はC++から来て1年目のCompSciの学生です。私は夏の自分のプロジェクトを試しています。 AForge.Video.FFMPEGビデオファイルリーダーを使用して、.aviから一連のビットマップを表示しようとしています。Picturebox from AForge FFMPEG empty - C#/ WinForms
それはそのデータ(コンソールプリント寸法、フレームレート、およびコーデック)を取得し、ピクチャを作成し、ファイルを見つけているようだ、しかし、ピクチャは空白/空アップします。私は.AVIのフレームからビットマップを取得:
それから私は、ピクチャボックスと、それを表示しようとしている:
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
けど。
ありがとうございます!
この「videoFrame.Dispose();」を削除する方法 –
@LeiYangの問題は、 'videoFrame.Dispose();'が削除されても問題は解決しません。私はVideoFileReaderが次のループの次のフレームに移動する必要があると信じます –
forループを使用せず、フレームの1つのみを表示するのはどうですか? –