摄像头拍照

本程序下载地址:

  在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 }

 三、程序运行结果

  

posted @ 2014-04-04 10:04  VC初学者  阅读(632)  评论(0编辑  收藏  举报