none
Получение снимка с веб камеры в высоком разрешении RRS feed

  • Общие обсуждения

  • Пробовал 2 варианта и у всех разрешение 640х480, а вот после установки программы LiveWebCam там в настройках можно произвести настройку и снимки с одной камеры уже получал 1280х720 на другой ни чего не изменилось

    Как на C# делать снимок с максимально поддерживаемым разрешением (не видео а просто фотку получить)

    private const int WM_CAP_DRIVER_CONNECT = 0x40a;
            private const int WM_CAP_DRIVER_DISCONNECT = 0x40b;
            private const int WS_CHILD = 0x40000000;
            private const int WS_POPUP = unchecked((int)0x80000000);
            private const int WM_CAP_SAVEDIB = 0x419;
    
    
            [DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")]
            public static extern IntPtr capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);
            [DllImport("user32", EntryPoint = "SendMessage")]
            public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
            static void Main(string[] args)
            {
                //String dName = "".PadRight(100);
                //String dVersion = "".PadRight(100);
                IntPtr hWndC = capCreateCaptureWindowA("VFW Capture", WS_POPUP | WS_CHILD, 0, 0, 1280, 720, 0, 0); // узнать дескриптор камери
                SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); //подключиться к камере 
                string path = Environment.GetEnvironmentVariable("USERPROFILE") + "\\Pictures\\" + DateTime.Now.ToString("yyyy.MM.dd HH.mm.ss") + ".jpg";
                IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
                SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32()); // сохранить скриншот
                SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //отключить камеру 
            }

    и при помощи AForge

    static FilterInfoCollection videoDevices = null;
            static VideoCaptureDevice videoSource = null;
            static Image bmp = null;
            static object s = new object();
    
            public static byte[] Снимок(bool file)
            {
                    videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);//Список веб камер
    
                    if (videoDevices.Count > 0)
                    {
                        videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
                        videoSource.NewFrame += new NewFrameEventHandler(NewFrame);
                        videoSource.Start();
                        Thread.Sleep(2000);
                        bmp.Save(Common.directoryEXE + @"\picture\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".jpeg", ImageFormat.Jpeg);
                        videoSource.Stop();
    				}
            }


    17 апреля 2018 г. 6:40