示例#1
0
        /// <summary>
        /// Stops the video capture
        /// </summary>
        public override void Stop()
        {
            // stop the timer
            this.Tmr.Stop();

            // disconnect from the video source
            Application.DoEvents();
            USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DRIVER_DISCONNECT, DriverIndex, 0);
            USER32.DestroyWindow(mCapHwnd);
            base.Stop();
        }
示例#2
0
        /// <summary>
        /// Capture the next frame from the video feed
        /// </summary>
        private void Tmr_Tick(object sender, System.EventArgs e)
        {
            try
            {
                // pause the timer
                this.Tmr.Stop();

                // get the next frame;
                USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_GRAB_FRAME, 0, 0);
                if (this.UseClipboard)
                {
                    SetToClipBoard();
                }
            }
            finally
            {
                // restart the timer
                //Application.DoEvents();
                this.Tmr.Start();
            }
        }
示例#3
0
        private void SetToClipBoard()
        {
            try
            {
                // copy the frame to the clipboard
                USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_EDIT_COPY, 0, 0);
                //USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_FILE_SAVEAS, 0, @"e:\tmp\" + DateTime.Now.ToString("HHmmss"));

                // paste the frame into the event args image

                // get from the clipboard
                IDataObject tempObj = Clipboard.GetDataObject();
                IMageClipboard = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);
                // raise the event
                if (ImageCaptured != null)
                {
                    this.ImageCaptured(this, IMageClipboard.GetThumbnailImage(Width, Height, null, System.IntPtr.Zero));
                }
                Clipboard.Clear();
            }
            catch { }
        }
示例#4
0
 public void ConfigVideoCompression()
 {
     USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0);
 }
示例#5
0
 public void ConfigVideoSource()
 {
     USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DLG_VIDEOSOURCE, 0, 0);
 }
示例#6
0
 public void ConfigVideoFormat()
 {
     USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DLG_VIDEOFORMAT, 0, 0);
 }
示例#7
0
 public void ConfigVideoDisplay()
 {
     USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_DLG_VIDEODISPLAY, 0, 0);
 }
示例#8
0
 public void StartAvi()
 {
     USER32.SendMessage(mCapHwnd, IMAGECAPTURE.WM_CAP_SEQUENCE, 0, 0);
 }
示例#9
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();
        }