C#WPF uEye相机捕捉视频

时间:2015-04-29 09:28:49

标签: c# wpf camera

我有程序从相机捕获视频。应用程序是在Windows窗体中,我想将此代码用于WPF应用程序,但它无法正常工作。 我使用手柄从uEye相机捕获图像。在Windows窗体中是

displayHandle = PictureBox.Handle

但是当我在WPF中使用句柄时,我没有收到来自摄像头的视频。 在WPF中,我使用此句柄

HwndSource hwndSource = HwndSource.FromVisual(pbMainImage) as HwndSource;
displayHandle = hwndSource.Handle;

但仍然无法正常工作

我在

之后使用的句柄
InitializeComponent();
private void onFrameEvent(object sender, EventArgs e){
  uEye.Camera Camera = sender as uEye.Camera;

  Int32 s32MemID;
  Camera.Memory.GetActive(out s32MemID);
  Camera.Display.Render(s32MemID, displayHandle, uEye.Defines.DisplayRenderMode.FitToWindow);
}

displayHandle si handle from component pictureImage。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

 HwndSource hwndSource = HwndSource.FromVisual(pbMainImage) as HwndSource;
displayHandle = hwndSource.Handle;

不要在

之后使用
InitializeComponent();

因为hwndSource为null然后Camera无法识别句柄。您可以在初始化组件之后使用句柄之前创建句柄。

答案 1 :(得分:0)

将IDS摄像机划分为WPF组件。

private void onFrameEvent(object sender, EventArgs e)
{
      uEye.Camera Camera = sender as uEye.Camera;

      Int32 s32MemID;
      Camera.Memory.GetActive(out s32MemID);
      if (frameCamera != null)
            frameCamera.Dispose();
      frameCamera = null;
      Camera.Memory.ToBitmap(s32MemID, out frameCamera);

      Dispatcher.Invoke(new Action(() =>
      {
            pbMainImage.Source = loadBitmap(frameCamera);
      }));
}
  

loadBitmap(frameCamera) - 将位图转换为BitmapSource