网上有很多各种各样的方法拍照。有Opencv vfw Dshow。vfw方式只能连接默认摄像头,捕获时还卡,两三秒内无响应。Dshow方式好,但网上有人的代码马上卡。我费了很大劲才成功。代码:
#include <Windows.h>
#include <dshow.h>
// 用于确保安全释放的宏
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
//摄像头序号
#define CAMERA_INDEX 2
class CCapture
{
public:
HRESULT Init(HWND hwnd); // 初始化
HRESULT FindCaptureDevice(); // 寻找视频采集设备
HRESULT Render(); // 渲染并预览视频
void DestroyGraph(); // 销毁先前创建的filter
private:
// 窗口句柄
HWND m_hwnd;
// 视频采集预览相关
IGraphBuilder *m_pGraph; // filter granph(manager)
ICaptureGraphBuilder2 *m_pCapture; // capture granph
IMediaControl *m_pMediaC; // 媒体控制接口
IMediaEventEx *m_pMediaE; // 媒体事件接口
IVideoWindow *m_pVideoW; // 视频窗口接口
IBaseFilter *m_pFilter; // 基类filter
};
HRESULT CCapture::Init(HWND hwnd)
{
HRESULT hr;
// 创建filter graph manager
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&