DirectShow VS2013 控制台下捕捉摄像头而且显示
须要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 控制台下捕捉摄像头而且显示的更多相关文章
- HSmartWindowControl 之 摄像头实时显示( 使用 WPF )
		
1.添加Halcon控件,创建WPF项目 在VS2013中创建一个WPF工程,然后添加halcon的控件和工具包,参见: HSmartWindowControl之安装篇 (Visual Studio ...
 - C# 基于Directshow.Net lib库 USB摄像头使用DirectShow.NET获取摄像头视频流
		
https://blog.csdn.net/u010118312/article/details/91766787 https://download.csdn.net/download/u010118 ...
 - eclipse控制台下实现jdbc简单的增删改查测试
		
1.现在MySQL中创建一个表 2.首先创建一个类 //导入的包 import java.sql.Connection;import java.sql.DriverManager;import jav ...
 - asp.net mvc后台操作之读写xml控制首页动态页面开关显示
		
一.背景 在asp.net mvc项目里,用户需要开拓几个活动版面,并以侧栏的方式呈现在首页右侧,几个活动时间不一致,为避免浏览者在活动未开放之时进入未开放的服务页面.因此不仅需要在活动代码中加入限制 ...
 - TVideoGrabber的使用(一)捕捉摄像头
		
使用TVideoGrabber捕捉摄像头,相当容易,只需几句代码即可解决问题,首先我们新建一个工程,然后从控件面板上拉取一个 TVideoGrabber控件到窗体中,然后再在窗体上放置四个Button ...
 - IE 、Firefox、Chrome 浏览器在 F12 控制台下切换至不同框架介绍
		
有不少网页的页面,还在使用 iframe 标签,而此时,相当于页面有两个 window 对象,一个为当前页面 window ,另一个则为 iframe 页面下的 window .因为,有时候需要在 c ...
 - 控制台下的计算器——C++实现
		
最近这段时间看操作系统的东西看的头晕脑胀的,所以先停个一晚上,写个控制台下的计算器,来练练栈的使用. 首先,分析一下要完成的东西.输入肯定使用string类来输入的,然后第一步,就是把string的字 ...
 - QT在Windows控制台下输出
		
原地址:http://blog.csdn.net/fjb2080/article/details/9013047 在windows的控制台下输出,需要在pro文件中加入: CONFIG += cons ...
 - Example005控制弹出窗口居中显示
		
<!-- 实例005控制弹出窗口居中显示 --> <head> <meta charset="UTF-8"> </head> < ...
 
随机推荐
- Django如何设置proxy
			
设置porxy的原因 一般情况下我们代理设置是针对与浏览器而言,通常只需在浏览器设置中进行配置,但它只针对浏览器有效,对我们自己编写的程序并任何效果,这时就需要我们在软件编码中加入代理设置. --- ...
 - 用typedef给结构体一个别名
			
转:typedef 一.用typedef给结构体一个别名 typedef struct tagMyStruct { int iNum; long lLength; } MyStruct; 这语句实际上 ...
 - QueryRunner的使用
			
在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...
 - Quartz1.8.5例子(三)
			
/* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...
 - theano中对图像进行convolution 运算
			
(1) 定义计算过程中需要的symbolic expression """ 定义相关的symbolic experssion """ # c ...
 - 从1500万用户巅峰跌落的app,血泪回顾图片社交那些坑
			
饭桌君说 第八届小饭桌创业课堂来了一位特殊的分享嘉宾,他曾经参与了一款当时极具风头的图片社交app的创始团队,靠谱团队,用户量急速上升到1500万,公司获得A轮……一切看上去都那么美好. 可是,由于各 ...
 - 在linux下的apache配置https协议,开启ssl连接
			
环境:linux 配置https协议,需要2大步骤: 一.生成服务器证书 1.安装openssl软件 yum install -y openssl mod_ssl 2.生成服务器私匙,生成server ...
 - Android开源项目发现----其他特殊效果篇(持续更新)
			
1. Crouton 丰富样式的Toast 允许alert.comfirm.info样式及点击消失样式,允许设置Toast显示时间,允许自定义View. 项目地址:https://github.com ...
 - sort merge join,hash join,netsloop join
			
Join Operations ? SORT-MERGE JOIN – Sorts tables on the join key and then merges them together – Sor ...
 - 开源网络备份软件 bacula 的安装、配置和运行
			
安装bacula 1 bacula的几种网络备份拓扑 前面文章介绍了bacula有5个组成部分,在实际的应用中,没有必要将5个部分分别放在不同的服务器上,它们之间的某些部分是可以合并的,常见的bacu ...