示例#1
0
        private void StartCapture()
        {
            mCapHwnd = capCreateCaptureWindowA("WebCap", WS_VISIBLE | WS_CHILD, 0, 0, this.pictureBox1.Width, this.pictureBox1.Height, this.pictureBox1.Handle.ToInt32(), 0);

            CAPTUREPARMS CaptureParams = new CAPTUREPARMS();

            CaptureParams.fYield                    = 1;
            CaptureParams.fAbortLeftMouse           = 0;
            CaptureParams.fAbortRightMouse          = 0;
            CaptureParams.dwRequestMicroSecPerFrame = 66667;
            CaptureParams.fMakeUserHitOKToCapture   = 0;
            CaptureParams.wPercentDropForError      = 10;//10
            CaptureParams.wChunkGranularity         = 0;
            CaptureParams.dwIndexSize               = 324000;
            CaptureParams.wNumVideoRequested        = 10;
            CaptureParams.wNumAudioRequested        = 10;
            CaptureParams.fCaptureAudio             = 1;
            CaptureParams.fMCIControl               = 0; //0
            CaptureParams.fStepMCIDevice            = 0; //0
            CaptureParams.dwMCIStartTime            = 0;
            CaptureParams.dwMCIStopTime             = 0;
            CaptureParams.fStepCaptureAt2x          = 0;//0
            CaptureParams.wStepCaptureAverageFrames = 5;
            CaptureParams.dwAudioBufferSize         = 10;


            // connect to the capture device
            Application.DoEvents();
            SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0);
            SendMessage(mCapHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0);   //66
            SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 1, 0);
            SendMessage(mCapHwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0);
            SendMessage2(mCapHwnd, WM_CAP_SET_SEQUENCE_SETUP, new IntPtr(Marshal.SizeOf(CaptureParams)), ref CaptureParams);
            DoIt();
        }
示例#2
0
        public WebCam(System.Windows.Forms.PictureBox preview)
        {
            ClearMem();
            cpParams   = new CAPTUREPARMS();
            vsCallback = new VideoStreamCallback(CallbackVideoStream);

            hPrevideWindow = capCreateCaptureWindow("picCam", WS_VISIBLE | WS_CHILD, 0, 0, preview.Width, preview.Height, preview.Handle, 0);
            SendMessage(hPrevideWindow, WM_CAP_DRIVER_CONNECT, IntPtr.Zero, IntPtr.Zero);
            SendMessage(hPrevideWindow, WM_CAP_DRIVER_CONNECT, IntPtr.Zero, IntPtr.Zero);
            SendMessage(hPrevideWindow, WM_CAP_SET_PREVIEWRATE, new IntPtr(100), IntPtr.Zero);
            SendMessage(hPrevideWindow, WM_CAP_DRIVER_CONNECT, new IntPtr(1), IntPtr.Zero);
            SendMessage(hPrevideWindow, WM_CAP_DRIVER_CONNECT, new IntPtr(1), IntPtr.Zero);

            IntPtr lParam = Marshal.AllocHGlobal(Marshal.SizeOf(cpParams));

            if (SendMessage(hPrevideWindow, WM_CAP_GET_SEQUENCE_SETUP, new IntPtr(Marshal.SizeOf(cpParams)), lParam) != IntPtr.Zero)
            {
                cpParams                  = Marshal.PtrToStructure <CAPTUREPARMS>(lParam);
                cpParams.fYield           = 1;
                cpParams.fAbortLeftMouse  = 0;
                cpParams.fAbortRightMouse = 0;

                Marshal.StructureToPtr(cpParams, lParam, true);
            }
            Marshal.FreeHGlobal(lParam);
            lParam = Marshal.AllocHGlobal(Marshal.SizeOf(bmiVideoFormat));

            if (SendMessage(hPrevideWindow, WM_CAP_GET_VIDEOFORMAT, new IntPtr(Marshal.SizeOf(bmiVideoFormat)), lParam) != IntPtr.Zero)
            {
                bmiVideoFormat.bmiHeader = Marshal.PtrToStructure <BITMAPINFOHEADER>(lParam);
                PictureData = new byte[bmiVideoFormat.bmiHeader.biSizeImage - 1];
            }

            Marshal.FreeHGlobal(lParam);
        }
示例#3
0
 public static extern int SendMessage2(int webcam1, int Msg, IntPtr wParam, ref CAPTUREPARMS lParam);
示例#4
0
 public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPTUREPARMS lParam);
 public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPTUREPARMS lParam);
示例#6
0
        /// <summary>
        /// Status de conexão da câmera
        /// </summary>
        //public bool Connected { get; set; }
        #endregion

        #region Start
        /// <summary>
        /// Starts the video capture
        /// </summary>
        /// <param name="FrameNumber">the frame number to start at.
        /// Set to 0 to let the control allocate the frame number</param>
        public override void Start()
        {
            #region for safety, call stop, just in case we are already running
            this.Stop();
            #endregion

            #region setup a capture window
            int Flags = 0;
            if (!this.UseClipboard)
            {
                Flags = IMAGECAPTURE.WS_VISIBLE | IMAGECAPTURE.WS_CHILD;
            }


            mCapHwnd = AVICAP32.capCreateCaptureWindowA("WebCap",
                                                        Flags, 0, 0,
                                                        this.Width,
                                                        this.Height,
                                                        this.Control.Handle,
                                                        0
                                                        );
            #endregion

            #region connect to the capture device
            Application.DoEvents();

            USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DRIVER_CONNECT, DriverIndex, 0);
            USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_SET_PREVIEWRATE, 66, 0); //66
            USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_SET_PREVIEW, 1, 0);

            //USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DLG_VIDEOSOURCE, 0, 0);
            //GetMCIDevice mci = new GetMCIDevice();
            //int i =USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_GET_MCI_DEVICE, Marshal.SizeOf(mci), mci);

            BITMAPINFO bInfo = new BITMAPINFO();
            bInfo.bmiHeader            = new BITMAPINFOHEADER();
            bInfo.bmiHeader.biSize     = (uint)Marshal.SizeOf(bInfo.bmiHeader);
            bInfo.bmiHeader.biWidth    = Width;
            bInfo.bmiHeader.biHeight   = Height;
            bInfo.bmiHeader.biPlanes   = 1;
            bInfo.bmiHeader.biBitCount = 24; // bits per frame, 24 - RGB
            USER32.SendBitmapMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_SET_VIDEOFORMAT, Marshal.SizeOf(bInfo), ref bInfo);


            CAPTUREPARMS CaptureParams = new CAPTUREPARMS();
            CaptureParams.fYield                    = 1;
            CaptureParams.fAbortLeftMouse           = 0;
            CaptureParams.fAbortRightMouse          = 0;
            CaptureParams.dwRequestMicroSecPerFrame = 66667;
            CaptureParams.fMakeUserHitOKToCapture   = 0;
            CaptureParams.wPercentDropForError      = 10;//10
            CaptureParams.wChunkGranularity         = 0;
            CaptureParams.dwIndexSize               = 324000;
            CaptureParams.wNumVideoRequested        = 10;
            CaptureParams.wNumAudioRequested        = 10;
            CaptureParams.fCaptureAudio             = 1;
            CaptureParams.fMCIControl               = 0; //0
            CaptureParams.fStepMCIDevice            = 0; //0
            CaptureParams.dwMCIStartTime            = 0;
            CaptureParams.dwMCIStopTime             = 0;
            CaptureParams.fStepCaptureAt2x          = 0;//0
            CaptureParams.wStepCaptureAverageFrames = 5;
            CaptureParams.dwAudioBufferSize         = 10;
            USER32.SendMessageA(mCapHwnd, IMAGECAPTURE.WM_CAP_SET_SEQUENCE_SETUP, new IntPtr(Marshal.SizeOf(CaptureParams)), CaptureParams);
            //ConfigFormat();
            #endregion

            #region set the timer information
            this.Tmr.Interval = TimeToCapture;
            if (this.UseClipboard)
            {
                this.Tmr.Start();
            }
            #endregion

            base.Start();
        }