Visual C++编程实现摄像头视频捕捉要点Word下载.docx

上传人:b****2 文档编号:13690405 上传时间:2022-10-12 格式:DOCX 页数:10 大小:20.36KB
下载 相关 举报
Visual C++编程实现摄像头视频捕捉要点Word下载.docx_第1页
第1页 / 共10页
Visual C++编程实现摄像头视频捕捉要点Word下载.docx_第2页
第2页 / 共10页
Visual C++编程实现摄像头视频捕捉要点Word下载.docx_第3页
第3页 / 共10页
Visual C++编程实现摄像头视频捕捉要点Word下载.docx_第4页
第4页 / 共10页
Visual C++编程实现摄像头视频捕捉要点Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Visual C++编程实现摄像头视频捕捉要点Word下载.docx

《Visual C++编程实现摄像头视频捕捉要点Word下载.docx》由会员分享,可在线阅读,更多相关《Visual C++编程实现摄像头视频捕捉要点Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

Visual C++编程实现摄像头视频捕捉要点Word下载.docx

//省略初始化部分代码

IBaseFilter*pCap;

//Videocapturefilter.

//省略初始化和添加到FilterGraph部分代码

pBuild->

RenderStream(&

PIN_CATEGORY_PREVIEW,&

MEDIATYPE_Video,pCap,NULL,NULL);

DirectShow提供了一个捕捉静态图像的方法:

使用SampleGrabberfilter。

依次按照以下三个步骤就可以了:

第一步,定义一个类实现SampleGrabber的回调接口IsampleGrabberCB:

classCSampleGrabberCB:

publicISampleGrabberCB

{

 //在后面提供的类中具体完成

}

CSampleGrabberCBmCB;

第二步、调用RenderStream依次把Stillpin、SampleGrabber和系统默认RendererFilter连接起来。

第三步、配置SampleGrabber以捕获数据。

视频捕捉类CCaptureVideo的具体实现

//CCaptureVideo视频捕捉类头文件

/////////////////////////////////////////////////////////////////////

#if!

defined(AFX_CAPTUREVIDEO_H__F5345AA4_A39F_4B07_B843_3D87C4287AA0__INCLUDED_)

#defineAFX_CAPTUREVIDEO_H__F5345AA4_A39F_4B07_B843_3D87C4287AA0__INCLUDED_

//CaptureVideo.h:

headerfile

#if_MSC_VER>

1000

#pragmaonce

#endif//_MSC_VER>

#include<

atlbase.h>

windows.h>

dshow.h>

#ifndefSAFE_RELEASE

#defineSAFE_RELEASE(x)\

if(NULL!

=x)\

{\

 x->

Release();

\

 x=NULL;

#endif

classCSampleGrabberCB;

classCCaptureVideo:

publicCWnd 

 friendclassCSampleGrabberCB;

 public:

  voidGrabOneFrame(BOOLbGrab);

  HRESULTInit(intiDeviceID,HWNDhWnd);

  intEnumDevices(HWNDhList);

  CCaptureVideo();

  virtual~CCaptureVideo();

 private:

  HWNDm_hWnd;

  IGraphBuilder*m_pGB;

  ICaptureGraphBuilder2*m_pCapture;

  IBaseFilter*m_pBF;

  IMediaControl*m_pMC;

  IVideoWindow*m_pVW;

  CComPtr<

ISampleGrabber>

m_pGrabber;

 protected:

  voidFreeMediaType(AM_MEDIA_TYPE&

mt);

  boolBindFilter(intdeviceId,IBaseFilter**pFilter);

  voidResizeVideoWindow();

  HRESULTSetupVideoWindow();

  HRESULTInitCaptureGraphBuilder();

};

#endif//!

//-------------------------------------------------------------------

//CCaptureVideo视频捕捉类实现文件CaptureVideo.cpp

//CaptureVideo.cpp:

implementationoftheCCaptureVideoclass.

//

#include"

stdafx.h"

CaptureVideo.h"

#ifdef_DEBUG

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#definenewDEBUG_NEW

BOOLbOneShot=FALSE;

//全局变量

publicISampleGrabberCB 

  longlWidth;

  longlHeight;

  TCHARm_szFileName[MAX_PATH];

//位图文件名称

  CSampleGrabberCB(){

   strcpy(m_szFileName,"

c:

\\donaldo.bmp"

);

  } 

  STDMETHODIMP_(ULONG)AddRef(){return2;

}

  STDMETHODIMP_(ULONG)Release(){return1;

  STDMETHODIMPQueryInterface(REFIIDriid,void**ppv){

  if(riid==IID_ISampleGrabberCB||riid==IID_IUnknown){ 

   *ppv=(void*)static_cast<

ISampleGrabberCB*>

(this);

   returnNOERROR;

  returnE_NOINTERFACE;

 }

 STDMETHODIMPSampleCB(doubleSampleTime,IMediaSample*pSample){

 return0;

STDMETHODIMPBufferCB(doubledblSampleTime,BYTE*pBuffer,longlBufferSize){

 if(!

bOneShot)return0;

 if(!

pBuffer)returnE_POINTER;

 SaveBitmap(pBuffer,lBufferSize);

 bOneShot=FALSE;

//创建位图文件

BOOLSaveBitmap(BYTE*pBuffer,longlBufferSize)

 HANDLEhf=CreateFile(

 m_szFileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,

 CREATE_ALWAYS,NULL,NULL);

 if(hf==INVALID_HANDLE_VALUE)return0;

  //写文件头 

  BITMAPFILEHEADERbfh;

  memset(&

bfh,0,sizeof(bfh));

  bfh.bfType=’MB’;

  bfh.bfSize=sizeof(bfh)+lBufferSize+sizeof(BITMAPINFOHEADER);

  bfh.bfOffBits=sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER);

  DWORDdwWritten=0;

  WriteFile(hf,&

bfh,sizeof(bfh),&

dwWritten,NULL);

  //写位图格式

  BITMAPINFOHEADERbih;

bih,0,sizeof(bih));

  bih.biSize=sizeof(bih);

  bih.biWidth=lWidth;

  bih.biHeight=lHeight;

  bih.biPlanes=1;

  bih.biBitCount=24;

bih,sizeof(bih),&

  //写位图数据

  WriteFile(hf,pBuffer,lBufferSize,&

  CloseHandle(hf);

  return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1