您的位置:首页 > 其它

image source相机snap模式采集

2015-07-23 14:45 316 查看
</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被注释之后仍然可以采集到图像,这是什么情况?
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: