DirectShow VS2013 控制台下捕捉摄像头并且显示

#include "windows.h" #include "TCHAR.h" #include <dshow.h>LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);int _tmain(int argc, _TCHAR* argv[]){IGraphBuilder *pGraph = NULL;ICaptureGraphBuilder2 *pBuilder = NULL;ICreateDevEnum *pSysDevEnum;IEnumMoniker *pEnumCat;IBaseFilter *pBaseFilter;IMoniker *pMoniker;IVideoWindow *pWindow;IMediaControl *pControl = NULL;IMediaEvent *pEvent = NULL;HRESULT hr = CoInitialize(NULL);long pWidth;long pHeight;HINSTANCE hInstance;hInstance = GetModuleHandle(NULL);WNDCLASS Draw;Draw.cbClsExtra = 0;Draw.cbWndExtra = 0;Draw.hCursor = LoadCursor(hInstance, IDC_ARROW);;Draw.hIcon = LoadIcon(hInstance, IDI_APPLICATION);;Draw.lpszMenuName = NULL;Draw.style = CS_HREDRAW | CS_VREDRAW;Draw.hbrBackground = (HBRUSH)COLOR_WINDOW;Draw.lpfnWndProc = WindowProc;Draw.lpszClassName = _T("DDraw");Draw.hInstance = hInstance;RegisterClass(&Draw);HWND hwnd = CreateWindow(_T("DDraw"),//上面注册的类名,要完全一致L"绘制", //窗口标题文字WS_OVERLAPPEDWINDOW, //窗口外观样式38,//窗口相对于父级的X坐标20,//窗口相对于父级的Y坐标480,//窗口的宽度250,//窗口的高度NULL,//没有父窗口,为NULLNULL,//没有菜单,为NULLhInstance,//当前应用程序的实例句柄NULL);//没有附加数据,,为NULL// 显示窗口ShowWindow(hwnd, SW_SHOW);// 更新窗口UpdateWindow(hwnd);if (FAILED(hr)){printf("ERROR – Could not initialize COM library");return -1;}hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuilder);if (SUCCEEDED(hr)){hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph);if (SUCCEEDED(hr)){hr = pBuilder->SetFiltergraph(pGraph);}}hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum, reinterpret_cast<void **>(&pSysDevEnum));hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0);if (pEnumCat->Next(1, &pMoniker, NULL) == S_OK){hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pBaseFilter);if (SUCCEEDED(hr)){hr = pGraph->AddFilter(pBaseFilter, L"Capture Filter");hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pBaseFilter, NULL, NULL);hr = pGraph->QueryInterface(IID_IVideoWindow, (void**)&pWindow);hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);pControl->Run();pWindow->put_Owner((OAHWND)hwnd);pWindow->put_WindowStyle(WS_CHILD);pWindow->get_Width(&pWidth);pWindow->get_Height(&pHeight);pWindow->SetWindowPosition(0, 0, pWidth, pHeight);}}// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}pMoniker->Release();pControl->Release();pGraph->Release();CoUninitialize();}// 消息处理函数的实现 LRESULT CALLBACK WindowProc(_In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam){switch (uMsg){case WM_DESTROY:{PostQuitMessage(0);return 0;}}return DefWindowProc(hwnd, uMsg, wParam, lParam);}

旅行要学会随遇而安,淡然一点,

DirectShow VS2013 控制台下捕捉摄像头并且显示

相关文章:

你感兴趣的文章:

标签云: