C# 从视频中获取图像
我正在尝试编写一个应用程序,可以访问连接到PC的摄像头,录制视频,并从视频中获取图像。我使用Forge.NET库访问摄像头: 我不知道名为AForge.Video.NewFrameEventHandler的事件是如何工作的。在此代码中,事件将位图返回null,而不是视频中的新帧,或者不调用事件。我希望每次帧都能从视频中获取帧到图片框,以生成类似视频流的内容,单击停止按钮后,我希望最后一幅图像保持显示在图片框中。有人知道怎么做吗?为什么我的代码不起作用 代码: 类似的代码如下:^] 在Windows窗体中,我在执行以下方法的线程中运行此视频:C# 从视频中获取图像,c#,.net,video-processing,aforge,C#,.net,Video Processing,Aforge,我正在尝试编写一个应用程序,可以访问连接到PC的摄像头,录制视频,并从视频中获取图像。我使用Forge.NET库访问摄像头: 我不知道名为AForge.Video.NewFrameEventHandler的事件是如何工作的。在此代码中,事件将位图返回null,而不是视频中的新帧,或者不调用事件。我希望每次帧都能从视频中获取帧到图片框,以生成类似视频流的内容,单击停止按钮后,我希望最后一幅图像保持显示在图片框中。有人知道怎么做吗?为什么我的代码不起作用 代码: 类似的代码如下:^] 在Window
private void VideoRecording()
{
camImg.videoSource.Start();
while (!StopVideo)
{
pictureBox1.Image = camImg.bitmap;
pictureBox1.Invalidate();
}
camImg.videoSource.Stop();
}
一种方法是去,它可以为你做的工作。我曾经参与过两个项目,它们使用这种方法从上传的视频中获取缩略图和/或静态图片。这会让人感觉有点不舒服,但它应该可以工作。如果我没记错的话,位图需要立即复制,因为它在事件发生后会被覆盖。在这里使用引用是不好的。尝试以下方法:
private void video_NewFrame( object sender, NewFrameEventArgs eventArgs )
{
// copy the new frame
bitmap = new Bitmap(eventArgs.Frame);
// process the frame
}
或
此外,您不应该为此使用额外的线程,因为Forge已经这样做了
private void VideoStream_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
Bitmap newFrame = new Bitmap(eventArgs.Frame);
pictureBox1.Image = newFrame;
}
label_ms.Invoke((MethodInvoker)(() => label_ms.Text = msTimeSpan.TotalMilliseconds.ToString()));
您最好的选择是查看该框架附带的一个大型示例:
我将Aforge视频库与我的FOSCAM一起使用,它工作得非常好。 下面是我的事件处理程序代码
private void Video_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
//Create Bitmap from frame
Bitmap FrameData = new Bitmap(eventArgs.Frame);
//Add to PictureBox
PictureBox.Image = FrameData;
}
NET使用本机DirectShow API访问视频捕获硬件。您可能想看看library,它是.NET应用程序和视频捕获API之间使用最广泛的“桥梁”。
label_ms.Invoke((MethodInvoker)(() => label_ms.Text = msTimeSpan.TotalMilliseconds.ToString()));
private void Video_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
//Create Bitmap from frame
Bitmap FrameData = new Bitmap(eventArgs.Frame);
//Add to PictureBox
PictureBox.Image = FrameData;
}