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(); }
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); }
public static extern int SendMessage2(int webcam1, int Msg, IntPtr wParam, ref CAPTUREPARMS lParam);
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);
/// <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(); }