image source相机snap模式采集

// snapimage.cpp : 定义控制台应用程序的入口点。

/
#include 
///添加相机需要的头文件
#include 
#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;
}
	
grabber.startLive( false );


   /////采集5幅图像


   pSink->snapImages( 5 );
 
  

snap  image()  以及startlive被注释之后仍然可以采集到图像,这是什么情况?

你可能感兴趣的:(image source相机snap模式采集)