程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VS2010開發MFC ActiveX,攝像頭拍照上傳Webservice(2)

VS2010開發MFC ActiveX,攝像頭拍照上傳Webservice(2)

編輯:C++入門知識

繼續記錄,第二步開發攝像頭拍照功能.

使用vfw.h開發攝像頭拍照功能,關於vfw網上有很多文章,很多代碼可以參考

參考:http://blog.163.com/huangqiao_8/blog/static/33900492008017111847364/

Vedio for Windows 是WIN32 SDK 中多媒體編程SDK 的視頻開發工具。在微軟的Visual C ++中提供了Vedio for Windows 的頭文件vfw.h 和庫文件vfw32.lib。

在ActiveX中顯示的Dialog中增加一個picture控件,設置ID為IDC_VIDEO,加入按鈕,打開攝像頭,拍照等,下面會貼入關鍵代碼:

1.引入vfw.h

#include <vfw.h>
#pragma comment(lib,"vfw32.lib")
//如果沒有引入afxcmn.h,在stdafx.h中添加:
//#include <afxcmn.h> 

2.在對話框的頭文件中加入如下變量

public:
    friend    UINT vproc(LPVOID pParam);
    friend LRESULT CALLBACK backproc(HWND hwnd,LPVIDEOHDR lpVHDR);
private:
    HWND videohwnd;
    CEvent e;
    CStatic    CAPVIDEO;
    BITMAPINFO *mapinfo;
    PBITMAPINFO tran;
//補充下 在對話框的DoDataExchange方法中添加如下代碼:
DDX_Control(pDX, IDC_CAPVIDEO, CAPVIDEO);//綁定控件IDC_CAPVIDEO和變量


 

3.打開攝像頭按鈕內的代碼

    CRect rc;
    CAPVIDEO.GetWindowRect(&rc);
    ScreenToClient(rc);

    CAPDRIVERCAPS capd;
    CAPSTATUS caps;
    tran=NULL;
    e.ResetEvent();
    AfxBeginThread(vproc,(void*)this);
    ::WaitForSingleObject(e,INFINITE);

        if(capDriverConnect(videohwnd,0)==TRUE)
        {
        capDriverGetCaps(videohwnd,sizeof(CAPDRIVERCAPS),&capd);
        capGetStatus(videohwnd,&caps,sizeof(CAPSTATUS));
        ::SetParent(videohwnd,*this);
        
        ::SetWindowLong(videohwnd,GWL_STYLE,WS_CHILD);
        ::SetWindowPos(videohwnd,NULL,rc.left,rc.top,
                rc.Width(),rc.Height(),SWP_NOZORDER);
        ::ShowWindow(videohwnd,SW_SHOW);
        //capPreviewScale(videohwnd,   1);   
        capPreviewRate(videohwnd,66);
        capPreview(videohwnd,true);    
        }

    else
    {
        AfxMessageBox("創建失敗");
    }
    

4.vproc方法

static UINT vproc(LPVOID pParam)
{

CViewDialog *p=(CViewDialog*)pParam;

HWND hwnd=capCreateCaptureWindow(NULL,WS_POPUP,0,0,10,10,0,0);
if(hwnd)
{
p->videohwnd=hwnd;
p->e.SetEvent();
}
MSG Msg;
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;

}

5.拍照按鈕內的代碼

LPWSTR picUrl=_T("d:/123.bmp");
capFileSaveDIB(videohwnd,picUrl);

 

現在可以存出圖了,但是bmp格式不常用,下次記錄裁剪bmp和轉換bmp為jpg.

有一段彎路,圖片控件ID默認是IDC_STATIC,開始沒有修改初始化時報錯因為ID重復,修改後就好了...

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved