我有一个简单的Winforms应用程序,允许用户同时选择多个视频(文件)并运行后台工作线程来循环播放BW中的每个视频。在下面粘贴了代码,我在这一行得到一个NullReferenceException“无法从......创建捕获”
Capture _capture = new Capture(videoFileName)
in processVideo方法。
N.B:如果我选择单个视频,相同的代码也能正常工作。因此,Capture类的多个实例存在一些问题。
我希望ProcessVideo方法有新的Capture实例并单独打开它。关于我可能做错的任何想法?
private void openVideoToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Video | *.AVI;*.MPEG;*.WMV;*.MP4;*.MOV;*.MPG;*.MPEG;*.MTS;*.FLV";
ofd.Multiselect = true;
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string[] videos = ofd.FileNames;
if (videos != null)
{
BackgroundWorker[] bw = new BackgroundWorker[videos.GetLength(0)];
int n = 0;
foreach (string video in videos)
{
bw[n] = new BackgroundWorker();
bw[n].DoWork += new DoWorkEventHandler(bw_DoWork);
bw[n++].RunWorkerAsync(video);
}
}
}
}
catch (NullReferenceException excpt)
{
MessageBox.Show(excpt.Message);
}
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
string filename = (string)e.Argument;
ProcessVideo(filename);
}
private void ProcessVideo(string videoFileName)
{
Capture _capture = new Capture(videoFileName);
UInt64 TOTAL_FRAMES = Convert.ToUInt64(_capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT));
for (UInt64 n = 0; n < TOTAL_FRAMES; n++)
{
using (Image<Bgr, Byte> img1 = _capture.QueryFrame())
{
//do something with the frame
}
}
}
答案 0 :(得分:0)
我建议您更新Sourcesafe服务包 它可能对你有帮助
[我认为你的代码是完美的 没错。
创建对象时出现错误,它清楚地看到了 可能有可能不支持文件格式 或者可能是内部错误问题。]
让我知道,在进行更新后,它是否有效。
问候红色