zoukankan      html  css  js  c++  java
  • 摄像头拍照

    本程序下载地址:

      在Windows下进行摄像头拍照功能开发,可以借助开源的摄像头项目或者一系列的demo。

      本程序实现一个简单的拍照功能, 需要使用Cximage库, CCameraAPI库,这些都是开源的,我们可以直接使用它提供出来的接口就可以了。

    一、初始化摄像头过程

      

      之前得再CTakephotoDlg类中创建一个私有的CCameraAPI 指针,并在CTakephotoDlg构造函数中置为空。

    class CTakephotoDlg : public CDialog
    {
    // Construction
    public:
        CTakephotoDlg(CWnd* pParent = NULL);    // standard constructor
        ~CTakephotoDlg();    // standard constructor
    
    // Dialog Data
        //{{AFX_DATA(CTakephotoDlg)
        enum { IDD = IDD_TAKEPHOTO_DIALOG };
            // NOTE: the ClassWizard will add data members here
        //}}AFX_DATA
    
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CTakephotoDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL
    
    // Implementation
    private:
        CCameraAPI * m_pCamera;    //创建一个CCameraAPI指针
    public:
        void InitCamera();
    protected:
        HICON m_hIcon;
    
        // Generated message map functions
        //{{AFX_MSG(CTakephotoDlg)
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        afx_msg void OnBtnPhoto();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };

      在构造函数中将该指针置为NULL;

    //初始化时清空
    m_pCamera = NULL;
     1 //初始化摄像头设备
     2 void CTakephotoDlg::InitCamera()
     3 {
     4     if(NULL == m_pCamera)
     5     {
     6         //创建一个摄像头api对象,之后通过调用这个对象提供的方法来拍照
     7         m_pCamera = new CCameraAPI();
     8         
     9         if(NULL == m_pCamera)
    10         {
    11             return ;
    12         }
    13         
    14         //获取窗口句柄
    15         CWnd* pCwnd = this->GetDlgItem(IDC_EDIT_VIDEO);
    16 
    17         if(NULL == pCwnd)
    18         {
    19             return;
    20         }
    21         
    22         //摄像头ID,可以任意填写
    23         CString strPid ="0";  
    24         
    25         //摄像头和某个窗口相关联,即预览显示的窗口
    26         m_pCamera->Init(pCwnd->m_hWnd, strPid);
    27     }
    28 }

    二、拍照过程

     1 //拍照响应函数
     2 void CTakephotoDlg::OnBtnPhoto() 
     3 {
     4     // TODO: Add your control notification handler code here
     5     
     6     //每次点击拍照按钮,拍照保存的图片为次数索引值
     7     static int nImageIndex = 0;
     8 
     9     CString strImageIndex = "";
    10 
    11     strImageIndex.Format("%d",nImageIndex);
    12 
    13     //图像保存的位置
    14     CString strSaveDir = "D:\" + strImageIndex + ".jpg";
    15     
    16     //获取视频预览当前中的一张图像帧
    17     CxImage* pCximage = m_pCamera->GetImage();
    18 
    19     //保存该图像帧
    20     pCximage->Save(strSaveDir, 3);    
    21 
    22     //下次拍照保存后的图片名
    23     nImageIndex++;
    24 }

     三、程序运行结果

      

  • 相关阅读:
    Oracle
    注解
    java 算法实现
    ConcurrentHashMap
    hashMap 1.8
    hashmap 1.7
    MySQL优化
    Mysql面试题
    tmux
    mysql 复制表结构、表数据的方法
  • 原文地址:https://www.cnblogs.com/xydblog/p/3644571.html
Copyright © 2011-2022 走看看