当前位置:首页 > C#教程 > C#高级

C# 操作摄像头

这个是大众普通方法,鉴于有网友和朋友问同样的问题,在这里将我的拙劣的代码关键部分贴出来,以便帮助更多的朋友们,不足之处甚多,我可以学习,交流,请教阁下

废话到此,直接上代码

private const int ws_child = 0x40000000;  //1073741824
        private const int ws_visible = 0x10000000;  //268435456
        private const int wm_user = 0x400;  //1024
        private const int wm_cap_start = wm_user;  //1024
        private const int wm_cap_stop = wm_cap_start + 68;  //1092
        private const int wm_cap_driver_connect = wm_cap_start + 10;  //1034
        private const int wm_cap_driver_disconnect = wm_cap_start + 11;  //1035
        private const int wm_cap_savedib = wm_cap_start + 25;  //1049
        private const int wm_cap_grab_frame = wm_cap_start + 60;  //1084
        private const int wm_cap_sequence = wm_cap_start + 62;  //1086
        private const int wm_cap_file_set_captrue_filea = wm_cap_start + 20;  //1044
        private const int wm_cap_sequence_nofile = wm_cap_start + 63;  //1087
        private const int wm_cap_capture_image_clipboard = wm_cap_start + 30;  //1054 复制捕捉的图像到剪切板
        private const int wm_cap_set_overlay = wm_cap_start + 51;  //1075
        private const int wm_cap_set_preview = wm_cap_start + 50;  //1074
        private const int wm_cap_set_callback_videostream = wm_cap_start + 6;  //1030
        private const int wm_cap_set_callback_error = wm_cap_start + 2;  //1026
        private const int wm_cap_set_callback_statusa = wm_cap_start + 3;  //1027
        private const int wm_cap_set_callback_frame = wm_cap_start + 5;  //1029
        private const int wm_cap_set_scale = wm_cap_start + 53;  //1077
        private const int wm_cap_set_previewrate = wm_cap_start + 52;  //1076
        private const int wm_cap_dlg_videosource = wm_cap_start + 42;  //1066 选择摄像头

 

/// <summary>
        /// 开启视频摄像头
        /// </summary>
        /// <returns></returns>
        public static void start()
        {
            if (bworkstart)
            {
                return;
            }
            byte[] lpszname = new byte[100];
            try
            {
                hwndc = windows.capcreatecapturewindow(lpszname, ws_child | ws_visible, mleft, mtop, mwidth, mheight, mcontrolptr, 0);
                if (hwndc.toint32() != 0)
                {
                    windows.sendmessage(hwndc, wm_cap_set_callback_videostream, 0, 0);  //设置返回视频流
                    windows.sendmessage(hwndc, wm_cap_set_callback_error, 0, 0);  //设置返回错误
                    windows.sendmessage(hwndc, wm_cap_set_callback_statusa, 0, 0);  //设置返回状态
                    //=====================这条比较慢=======================
                    windows.sendmessage(hwndc, wm_cap_driver_connect, 0, 0);  //设备连接
                    //=====================================================
                    //windows.sendmessage(hwndc, wm_cap_sequence, 0, 0);  //开始捕捉
                    //=====================================================
                    windows.sendmessage(hwndc, wm_cap_set_scale, 1, 0);  //设置比例
                    windows.sendmessage(hwndc, wm_cap_set_previewrate, 66, 0);  //设置预览速度
                    windows.sendmessage(hwndc, wm_cap_set_overlay, 1, 0);  //设置叠加
                    windows.sendmessage(hwndc, wm_cap_set_preview, 1, 0);  //设置预览

                    bworkstart = true;
                }
                //return true;
            }
            catch (exception)
            {
                //return false;
            }
            //finally
            //{
                //写日志  global.log.write( “sendmessage “);
                //logclass.writelog("sendmessage");
            //}
        }

/// <summary>
        /// 关闭视频摄像头
        /// </summary>
        public static void stop()
        {
            windows.sendmessage(hwndc, wm_cap_driver_disconnect, 0, 0);
            bworkstart = false;
        }

/// <summary>
        /// 抓图或者拍照,然后保存到指定路径下
        /// </summary>
        /// <param name="path">要保存bmp文件的路径</param>
        public static void grabimage(string path)
        {
            intptr hbmp = marshal.stringtohglobalansi(path);
            windows.sendmessage(hwndc, wm_cap_savedib, 0, hbmp.toint32());  //0x41e
        }

/// <summary>
        /// 捕捉图像复制到剪切板
        /// </summary>
        /// <returns></returns>
        public static bool copytoclipboard()
        {
            return windows.sendmessage(hwndc, wm_cap_capture_image_clipboard, 0, 0); 
        }


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!