摄像头驱动类

来源:互联网 发布:手机电信4g网络被劫持 编辑:程序博客网 时间:2024/05/29 04:52
 

private int hCaptureM;
        private bool isUnload = false;

        public ClassVideoCapture()
        {
 
        }
        ~ClassVideoCapture()
        {
            if (!isUnload)
            {
                this.UnLoad();
            }
        }
        [DllImport("avicap32.dll")]
        private static extern int capCreateCaptureWindow(string strWindowName, int dwStyle, int x, int y, int width, int height, int hwdParent, int nID);
        [DllImport("user32.dll")]
        private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
        [DllImport("user32.dll")]
        private static extern int SendMessage(int hwnd, int wMsg, int wParam, string lPara);
        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(int hObject);//我记得在这种动态链接库中的方法名是不能够乱写的,好像,方法名都是已经存在的哦!这真的就是数据库么只怕是系统文件吧
        public bool Initialize(Control aContainer,int intWidth,int intHeight)
        {
            hCaptureM = capCreateCaptureWindow("", 0x40000000 | 0x10000000, 0, 0, intWidth, intHeight, aContainer.Handle.ToInt32(), 1);
            if (hCaptureM == 0)
            {
                return false;
            }
            int ret = SendMessage(hCaptureM, 1034, 0, 0);
            if (ret == 0)
            {
                CloseHandle(hCaptureM);
                return false;
            }

            ret = SendMessage(hCaptureM, 1074, 1, 0);
            if (ret == 0)
            {
                this.UnLoad();
                return false;  
            }
            ret = SendMessage(hCaptureM, 1077, 1, 0);
            if (ret == 0)
            {
                this.UnLoad();
                return false;
            }
            //WM_CAP_SET_PREVIEWRATE
            ret = SendMessage(hCaptureM, 1076, 66, 0);
            if (ret == 0)
            {
                this.UnLoad();
                return false;
            }
            return true;
        }
        private void UnLoad()
        {
            int ret = SendMessage(hCaptureM, 1035, 0, 0);
            CloseHandle(this.hCaptureM);
            isUnload = true;
        }
        public void SingleFramBegin()
        {
            int ret = SendMessage(hCaptureM, 1094, 0, 0);
        }
        public void SingleFramEnd()
        {
            int ret = SendMessage(hCaptureM, 1095, 0, 0);
        }
        public void SingleFramMode()
        {
            int ret = SendMessage(hCaptureM, 1084, 0, 0);
        }
        public void PreViewMode()
        {
            int ret=SendMessage(hCaptureM,1074,1,0);
        }
        public void CopyToClipBoard()
        {
            int ret = SendMessage(hCaptureM, 1054, 0, 0);
        }
        public void ShowFormatDialog()
        {
            int ret = SendMessage(hCaptureM, 1065, 0, 0);

        }
        public void SaveToDIB(string fileName)
        {
            int ret = SendMessage(hCaptureM,1049,0,fileName);
        }
        public void ShowDisplayDialog()
        {
            int ret = SendMessage(hCaptureM, 1067, 0, 0);
        }

        public System.Drawing.Image getCaptureImage()
        {
            System.Windows.Forms.IDataObject Idata = System.Windows.Forms.Clipboard.GetDataObject();//原来是从剪切板里获取的数据啊
            System.Drawing.Image retImage = null;
            if (Idata != null)
            {
                if (Idata.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap))
                {
                    retImage = (System.Drawing.Image)Idata.GetData(System.Windows.Forms.DataFormats.Bitmap);
                }
                else if (Idata.GetDataPresent(System.Windows.Forms.DataFormats.Dib))
                {
                    retImage = (System.Drawing.Image)Idata.GetData(System.Windows.Forms.DataFormats.Dib);
                }
            }
            return retImage;
        }

 窗口加载的时候把Initialize方法驱动起来。

保存的时候将调用copy到剪切板方法,

让后在从剪切板获得数据转换成图片,也即是调用getCaptureImage方法

最后保存就行了

保存可用一下代码实现:

image.save(路径,格式);

路径可用程序启动路径比较方便。

如:Application.StartUpPath

好了,这样一个带有保存功能的摄像头驱动程序就完成了,不过这里保存的是图片,如过能保存成视频的话就更好了

这样也好,保存成图片,如果用来发送的话,会比较方便吧

原创粉丝点击