当Picturebox图像从其手柄改变时触发事件

我通过C#中的“avicap32”dll文件访问网络摄像头,并且我遵循了这里的代码。 网络摄像头启动并且其LED变为活动状态有趣的一点是,图像不是通过ImageBox属性设置的,也不是通过PictureBox Handle设置的BackgroundImage属性。 图片框不可见&网络摄像头灯保持活动状态,但没有图片框事件会在其图像通过其句柄进行更改时触发

我已经尝试过的是

  • Picturebox BackgroundImageChanged事件(Not firing)
  • Picturebox Paint Event(也不会触发)

    我可以实现一个定时器/线程/后台工作人员定期从图片框中获取图片,但由于性能问题,我想应用面向事件的方法。 连接到网络摄像头的代码如下

    public void OpenConnection()
    {
        string DeviceIndex = Convert.ToString(DeviceID);
        IntPtr oHandle = Container.Handle;
    
    hHwnd = capCreateCaptureWindowA(ref DeviceIndex, WS_VISIBLE | WS_CHILD, 0, 0, 640, 480, oHandle.ToInt32(), 0);
    
         // Connect to device
       if (SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, DeviceID, 0) != 0)
        {
             // Set the preview scale
           SendMessage(hHwnd, WM_CAP_SET_SCALE, -1, 0);
            // Set the preview rate in terms of milliseconds
            SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0);
    
             // Start previewing the image from the camera
           SendMessage(hHwnd, WM_CAP_SET_PREVIEW, -1, 0);
    
     // Resize window to fit in picturebox
     SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, Container.Height, Container.Width, SWP_NOMOVE | SWP_NOZORDER);
    
        }
           else
        {
            // Error connecting to device close window
            DestroyWindow(hHwnd);
        }
    }
    
  • 任何其他解决方案只有在本机或没有任何其他外部库时才会受到欢迎,因为我已经探索并使用了其他方法,如Aforge和OpenCV,但这些不是要求

    链接地址: http://www.djcxy.com/p/81047.html

    上一篇: Trigger event when Picturebox Image changed from its Handle

    下一篇: Camera Preview rotates wrong way