我正在编写一个 WPF 应用程序,我需要在其中显示网络摄像头提要。我可以使用 AForge 框架轻松地做到这一点。但是当我从一台计算机更改为另一台计算机时,相同的代码不会以相同的方式工作。
在第一个中,网络摄像头提要完美运行,但在另一个中,这不会发生,提要有很多延迟,并且应用程序无法正常工作。
这是代码:
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap img = (Bitmap)eventArgs.Frame.Clone();
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, (SendOrPostCallback)delegate
{
IntPtr hBitmap = img.GetHbitmap();
System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
DeleteObject(hBitmap);
img.Dispose();
GC.Collect();
image1.Source = bitmapSource;
}, null);
}
这段代码真的很简单,它以 a 的形式从网络摄像头获取一个 new_frame,Bitmap
我需要做的就是将其转换为 a BitmapSource
,这样我就可以在 WPF 的图像帧中显示。我认为这种转换是正在发生的混乱的原因,但我不明白为什么它在计算机中有效而在其他计算机中无效。
计算机规格几乎相同,处理器相同,系统内存也相同。
我的问题是关于性能的,一台计算机中的这段代码运行流畅,并且网络摄像头的提要按原样呈现,当我将它移植到另一台 PC 时,这不会发生。