3
我試圖在WPF中顯示相機捕獲的幀。我已經可以顯示圖像。但無法弄清事件處理方法?在WinForm中它是Application.Idle,但我應該在WPF中使用什麼?我已經看到這thread已經..我無法做到。EMGU CV攝像頭捕獲WPF?
我試圖在WPF中顯示相機捕獲的幀。我已經可以顯示圖像。但無法弄清事件處理方法?在WinForm中它是Application.Idle,但我應該在WPF中使用什麼?我已經看到這thread已經..我無法做到。EMGU CV攝像頭捕獲WPF?
爲什麼不能使用Timer.Elapsed事件?
只要記住在工作線程中發生了回調回調,這使得不可能更新UI。所以您應該使用SynchronizationContext將UI更新操作引導至正確的線程。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//...
this.Dispatcher.Hooks.DispatcherInactive += new EventHandler(Hooks_DispatcherInactive);
}
void Hooks_DispatcherInactive(object sender, EventArgs e)
{
using (Image<Bgr, byte> frame = capture.QueryFrame())
{
if (frame != null)
{
using (var stream = new MemoryStream())
{
// My way to display frame
frame.Bitmap.Save(stream, ImageFormat.Bmp);
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(stream.ToArray());
bitmap.EndInit();
webcam.Source = bitmap;
};
}
}
}
也許更好的解決方案是將兩種方法結合起來:聽調度員活動,但不渲染幀
另外,因爲所有的UI任務經過調度,你可以在DispatcherInactive事件作出反應直到過了一段時間。 – 2011-01-22 17:03:07