我正在用 Emgu 编写一个简单的视频播放,它是 opencv 的 ac# 包装器。
现在我可以播放视频了,但我发现 fps 不准确,比正常快一点。
在我的代码中,我Thread.sleep()
习惯在 2 帧之间等待一段时间。代码是:
int fps = getFromFile(file); // which is 30
while (true) {
var frame = CvInvoke.cvQueryFrame(capture);
if (frame.ToInt32() == 0) break;
Image<Bgr, byte> dest = new Image<Bgr, byte>(Convert.ToInt32(width), Convert.ToInt32(height));
CvInvoke.cvCopy(frame, dest, IntPtr.Zero);
box.Image = dest;
Thread.Sleep(1000 / Convert.ToInt32(fps));
}
哪里出了问题,如何解决?
更新
box
代码中的 是,Emgu.UI.ImageBox
这是线程安全的,我可以直接从其他线程访问它:box.Image = dest