这样显示不会影响对窗体的拖动
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.ML;
using Emgu.Util;
using System.IO;
namespace 视频读取
{
public partial class Form1 : Form
{
MovieInfo movieInfo;//结构体在最下面
int Interval;
string video;
Timer myTimer;
Capture a;
int zongg;
RunTaskDelegate runTask ;
public Form1()
{
InitializeComponent();
}
delegate void RunTaskDelegate(int seconds); //需要委托
private void button1_Click(object sender, EventArgs e)
{
myTimer = new Timer();
myTimer.Interval = 1000 / Convert.ToInt32(movieInfo.fps);
myTimer.Tick += new EventHandler(MyTimer_Tick);
myTimer.Start();
}
private void MyTimer_Tick(object sender, EventArgs e)
{
int p = movieInfo.currentFrame + 1;
if (p >= movieInfo.frameCount)
{
myTimer.Stop();
return;
}
else
{
runTask = new RunTaskDelegate(PlayVideoFile);
runTask.Invoke(1);
}
}
private void Form1_Load(object sender, EventArgs e)
{
//读取视频里面的参数
video = "1.avi";
a = new Emgu.CV.Capture(video);
movieInfo = new MovieInfo(video, a);
Interval = 1000 / Convert.ToInt32(movieInfo.fps);
zongg = movieInfo.frameCount;//总帧数
}
private void PlayVideoFile(int c)//每次显示一帧
{
Image<Bgr, byte> frame = a.QueryFrame();
if (frame != null)
{
Image<Gray, byte> grayFrame = frame.Convert<Gray, byte>();
pictureBox1.Image = grayFrame.ToBitmap();
}
}
}
struct MovieInfo//结构体,描述视频里面的内容
{
public String filename;
public int frameCount;
public int width;
public int height;
public int currentFrame;
public int fps;
public MovieInfo(String filename1, IntPtr capture)
{
filename = filename1;
frameCount = Convert.ToInt32(CvInvoke.cvGetCaptureProperty(capture, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT));
width = Convert.ToInt32(CvInvoke.cvGetCaptureProperty(capture, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH));
height = Convert.ToInt32(CvInvoke.cvGetCaptureProperty(capture, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT));
currentFrame = Convert.ToInt32(CvInvoke.cvGetCaptureProperty(capture, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES));
fps = Convert.ToInt32(CvInvoke.cvGetCaptureProperty(capture, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS));
}
}
}