VS2010开发MFC ActiveX,摄像头拍照上传Webservice(2)

继续记录,第二步开发摄像头拍照功能.

使用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重复,修改后就好了...

你可能感兴趣的:(webservice)