</pre><p></p><p></p><pre name="code" class="html">// snapimage.cpp : 定义控制台应用程序的入口点。
/
#include <iostream>
///添加相机需要的头文件
#include <tisudshl.h>
#include "../Common/CmdHelper.h"
///添加所需要的名词空间
using namespace _DSHOWLIB_NAMESPACE;
int _tmain(int argc, _TCHAR* argv[])
{
初始化的类库
DShowLib::InitLibrary();
///创建采集对象
Grabber grabber;
//显示相机的参数设置的属性页,同时保存相机的设置
if( !setupDeviceFromFile( grabber ) )
{
return -1;
}
创建的相机采集的图像的格式内存
tFrameHandlerSinkPtr pSink= FrameHandlerSink::create(eY800,1);
///设计采集图像的模式,设置true为snap采图模式,设置false为grab采集模式
pSink->setSnapMode(true);
将采集程序和内存设置为pSink
grabber.setSinkType(pSink);
判断程序采集程序是否打开
if (!grabber.prepareLive(false))
{
std::cerr<<"无法将视频格式转化为eY800格式";
return -1;//退出程序
}
FrameTypeInfo info;
pSink->getOutputFrameType(info);
/创建8位字节的内存,用于输出图像数据
BYTE *pbuf[5];
for (int i=0;i<5;++i)
{
pbuf[i]=new BYTE[info.buffersize];
///获取每张图片需要的内存
}
//
tMemBufferCollectionPtr pCollection = MemBufferCollection::create( info, 5, pbuf );
Start live mode for fast snapping. The live video will not be displayed,
// because false is passed to startLive().
grabber.startLive( false );
/采集5幅图像
pSink->snapImages( 5 );
//关闭采集的对象
grabber.closeDev();
//关闭对象
grabber.stopLive();
///释放所创建的内存
pCollection->save("file*.bmp");
///释放中间所创建的内存
for (int j=0;j<5;++j)
{
delete pbuf[j];
}
return 0;
}
<pre name="code" class="cpp">
grabber.startLive( false );
/采集5幅图像
pSink->snapImages( 5 );
snap image() 以及startlive被注释之后仍然可以采集到图像,这是什么情况?