コード例 #1
0
ファイル: AviCap.cs プロジェクト: ricksam/Framework
        /// <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();
        }