须要lib库文件 strmiids.lib,下载地址:http://download.csdn.net/detail/dopamy_busymonkey/8872687

放在解决方式中项目的根文件夹中直接使用(也能够放在VS的安装文件夹中的库文件夹中,可是为了方便之后查找。还是放在项目文件夹中)。

新建控制台项目。加入依赖项 strmiids.lib,在项目的解决方式资源管理器中。项目右键,属性中加入:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

接下来加入cpp文件,源代码例如以下:

#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, //没有父窗体,为NULL
NULL, //没有菜单,为NULL
hInstance, //当前应用程序的实例句柄
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 控制台下捕捉摄像头而且显示的更多相关文章

  1. HSmartWindowControl 之 摄像头实时显示( 使用 WPF )

    1.添加Halcon控件,创建WPF项目 在VS2013中创建一个WPF工程,然后添加halcon的控件和工具包,参见: HSmartWindowControl之安装篇 (Visual Studio ...

  2. C# 基于Directshow.Net lib库 USB摄像头使用DirectShow.NET获取摄像头视频流

    https://blog.csdn.net/u010118312/article/details/91766787 https://download.csdn.net/download/u010118 ...

  3. eclipse控制台下实现jdbc简单的增删改查测试

    1.现在MySQL中创建一个表 2.首先创建一个类 //导入的包 import java.sql.Connection;import java.sql.DriverManager;import jav ...

  4. asp.net mvc后台操作之读写xml控制首页动态页面开关显示

    一.背景 在asp.net mvc项目里,用户需要开拓几个活动版面,并以侧栏的方式呈现在首页右侧,几个活动时间不一致,为避免浏览者在活动未开放之时进入未开放的服务页面.因此不仅需要在活动代码中加入限制 ...

  5. TVideoGrabber的使用(一)捕捉摄像头

    使用TVideoGrabber捕捉摄像头,相当容易,只需几句代码即可解决问题,首先我们新建一个工程,然后从控件面板上拉取一个 TVideoGrabber控件到窗体中,然后再在窗体上放置四个Button ...

  6. IE 、Firefox、Chrome 浏览器在 F12 控制台下切换至不同框架介绍

    有不少网页的页面,还在使用 iframe 标签,而此时,相当于页面有两个 window 对象,一个为当前页面 window ,另一个则为 iframe 页面下的 window .因为,有时候需要在 c ...

  7. 控制台下的计算器——C++实现

    最近这段时间看操作系统的东西看的头晕脑胀的,所以先停个一晚上,写个控制台下的计算器,来练练栈的使用. 首先,分析一下要完成的东西.输入肯定使用string类来输入的,然后第一步,就是把string的字 ...

  8. QT在Windows控制台下输出

    原地址:http://blog.csdn.net/fjb2080/article/details/9013047 在windows的控制台下输出,需要在pro文件中加入: CONFIG += cons ...

  9. Example005控制弹出窗口居中显示

    <!-- 实例005控制弹出窗口居中显示 --> <head> <meta charset="UTF-8"> </head> < ...

随机推荐

  1. 精通 Oracle+Python,第 9 部分:Jython 和 IronPython — 在 Python 中使用 JDBC 和 ODP.NET

    成功的编程语言总是会成为顶级开发平台.对于 Python 和世界上的两个顶级编程环境 Java 和 Microsoft .NET 来说的确如此. 虽然人们因为 Python 能够快速组装不同的软件组件 ...

  2. 【python之旅】python简介和入门

    python简介: 一.什么是python python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了打发时间,决心开发一个新的脚本解释程序, ...

  3. SQL的四种语言和数据库范式

    1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...

  4. about oracle

    Oracle  劳伦斯.埃里森 Larry Ellison history: 人工管理阶段 文件管理阶段 数据库系统阶段 model:[模型是所研究的系统.过程.事物或概念的一种表达形式] 层次结构m ...

  5. DATE 使用

    DATE 使用 标签(空格分隔): SHELL 使用shell处理文本时经常要使用date,但各种参数经常忘,记录在此: #date 获取当前时间 #date -d "-1 week&quo ...

  6. android调试bug集锦 onActivityResult立即返回,并且被CANCEL

    症状: 在使用startActivityForResult调用照相机或者选择图片的时候,总是onActivityResult立马返回,resultCode=0 CANCEL. startActivit ...

  7. linux安装python使用的MySQLdb

    安装mysqldb模块需已安装mysql 使用pip安装MySQLdb pip install mysql-python mac os安装mysqldb sudo pip install mysql- ...

  8. Phonegap 3.0 设置APP是否全屏

    Phonegap 3.0 默认是全屏,如需要取消全屏,可手动修改config, 在APP/res/xml/config.xml文件可设置preference: <?xml version='1. ...

  9. xcode 环境,多工程联编设置【转】

    http://blog.csdn.net/vienna_zj/article/details/8467522 一.xcode4中的环境变量 $(BUILT_PRODUCTS_DIR) build成功后 ...

  10. 手动删除文件夹exe病毒并恢复原来文件夹

    转自手动删除文件夹exe病毒并恢复原来文件夹 经常使用U盘.MP3.MP4等移动硬盘的大家,有时是不是会发现,移动硬盘里有现了exe文件,原来本来有一个文件夹的名字是 音乐 ,但后来发现 音乐 这个文 ...