当前位置:首页 > 服务端 > Direct Show采集图像实例

Direct Show采集图像实例

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 //  CaptureVideo.h: interface for the CCaptureVideo class.
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#if  !defined(AFX_CAPTUREVIDEO_H__973C8C7A_47A3_45B6_9B28_0A4A08003540__INCLUDED_)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#define  AFX_CAPTUREVIDEO_H__973C8C7A_47A3_45B6_9B28_0A4A08003540__INCLUDED_
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#if  _MSC_VER > 1000
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#pragma  once
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#endif   //  _MSC_VER > 1000
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#include 
< atlbase.h >
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#include 
< windows.h >
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#include 
< dshow.h >
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#ifndef SAFE_RELEASE
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#define  SAFE_RELEASE( x ) \
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
if  ( NULL  !=  x ) \
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{ \
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    x
->Release( ); \
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    x 
= NULL; \
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#endif
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
class  CSampleGrabberCB;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
class  CCaptureVideo  :  public  CWnd
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    friend 
class CSampleGrabberCB;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
public:
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
void GrabOneFrame(BOOL bGrab);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
void ImageProcess(BOOL bImage);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HRESULT Init(
int iDeviceID,HWND hWnd);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    CCaptureVideo();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
virtual ~CCaptureVideo();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    BOOL bIsVideoOpen;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
void SwitchImageProcess(BOOL bprocess);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记       
void ImageProcessing(unsigned char*m_pDibBits,int m_height, int m_width);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
private:
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HWND m_hWnd;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    IGraphBuilder 
*m_pGB;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    ICaptureGraphBuilder2
* m_pCapture;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    IBaseFilter
* m_pBF;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    IMediaControl
* m_pMC;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    IVideoWindow
* m_pVW;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    CComPtr 
<ISampleGrabber> m_pGrabber;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
protected:
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
void FreeMediaType(AM_MEDIA_TYPE& mt);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
bool BindFilter(int deviceId, IBaseFilter **pFilter);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HRESULT InitCaptureGraphBuilder();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}
;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#endif   //  !defined(AFX_CAPTUREVIDEO_H__973C8C7A_47A3_45B6_9B28_0A4A08003540__INCLUDED_)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 //  CaptureVideo.cpp: implementation of the CCaptureVideo class.
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#include 
" stdafx.h "
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#include 
" CaptureVideo.h "
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#include 
" ImageProcess.h "
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#ifdef _DEBUG
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#undef  THIS_FILE
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
static   char  THIS_FILE[] = __FILE__;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#define  new DEBUG_NEW
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#endif
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
/////////////////////////声明全局变量//////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 BOOL bIsSavePic  =  FALSE;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记BOOL bIsImageProcess 
=  FALSE;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 class  CSampleGrabberCB: public  ISampleGrabberCB 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
public:
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
long lWidth;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
long lHeight;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    CCaptureVideo dlg;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    STDMETHODIMP_(ULONG) AddRef() 
return 2; }
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    STDMETHODIMP_(ULONG) Release() 
return 1; }
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    STDMETHODIMP QueryInterface(REFIID riid, 
void ** ppv)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            
*ppv = (void *) static_cast<ISampleGrabberCB*> ( this );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            
return NOERROR;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        }
 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return E_NOINTERFACE;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    STDMETHODIMP SampleCB( 
double SampleTime, IMediaSample * pSample )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return 0;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//回调函数
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    STDMETHODIMP BufferCB( double dblSampleTime, unsigned char* pBuffer, long lBufferSize )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
if (!pBuffer)     return E_POINTER;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
if (bIsImageProcess) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
{//如果条件为真则进行数字图像处理
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
            dlg.ImageProcessing(pBuffer, lHeight, lWidth);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return 0;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}
;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记CSampleGrabberCB mCB;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 //  Construction/Destruction
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 CCaptureVideo::CCaptureVideo() 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
//COM Library Intialization
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    if(FAILED(CoInitialize(NULL))) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"CoInitialize Failed!\r\n"); 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_hWnd 
= NULL;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_pVW 
= NULL;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_pMC 
= NULL;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_pGB 
= NULL;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_pCapture 
= NULL; 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    bIsVideoOpen 
= FALSE;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记CCaptureVideo::
~ CCaptureVideo()
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (bIsVideoOpen) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
// Stop media playback
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
        if(m_pMC)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            m_pMC
->Stop();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
if(m_pVW)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            m_pVW
->put_Visible(OAFALSE);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            m_pVW
->put_Owner(NULL);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        SAFE_RELEASE(m_pCapture);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        SAFE_RELEASE(m_pMC);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        SAFE_RELEASE(m_pGB);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        SAFE_RELEASE(m_pBF);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        CoUninitialize( );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
///////////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
////                        DirectShow核心代码
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
///////////////////////////////////////////////////////////////////////////

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 HRESULT CCaptureVideo::Init( int  iDeviceID, HWND hWnd)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HRESULT hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= InitCaptureGraphBuilder();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (FAILED(hr))
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Failed to get video interfaces!");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// Bind Device Filter. We know the device because the id was passed in
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    if(!BindFilter(iDeviceID, &m_pBF))
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"未找到USB摄像头!\n请检查设备后重试!");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        PostQuitMessage(
0);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return S_FALSE;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGB->AddFilter(m_pBF, L"Capture Filter");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, // m_pBF, NULL, NULL);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// create a sample grabber
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if!m_pGrabber )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Fail to create SampleGrabber, maybe qedit.dll is not registered?");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    CComQIPtr
< IBaseFilter, &IID_IBaseFilter > pGrabBase(m_pGrabber);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
//**********设置视频格式**********//
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    AM_MEDIA_TYPE mt; 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    ZeroMemory(
&mt, sizeof(AM_MEDIA_TYPE));
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    mt.majortype 
= MEDIATYPE_Video;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    mt.subtype 
= MEDIASUBTYPE_RGB24;  //抓取24位位图
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr = m_pGrabber->SetMediaType(&mt);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if( FAILED( hr ) )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Fail to set media type!");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGB->AddFilter( pGrabBase, L"Grabber" );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if( FAILED( hr ) )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Fail to put sample grabber in graph");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// try to render preview/capture pin
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if( FAILED( hr ) )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        hr 
= m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if( FAILED( hr ) )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Can't build the graph");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGrabber->GetConnectedMediaType( &mt );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if ( FAILED( hr) )
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Failt to read the connected media type");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    VIDEOINFOHEADER 
* vih = (VIDEOINFOHEADER*) mt.pbFormat;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    mCB.lWidth 
= vih->bmiHeader.biWidth;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    mCB.lHeight 
= vih->bmiHeader.biHeight;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    FreeMediaType(mt);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGrabber->SetBufferSamples( FALSE );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGrabber->SetOneShot( FALSE );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGrabber->SetCallback( &mCB, 1 );
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
//*********设置视频捕捉窗口********//
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    m_hWnd = hWnd ; //picture控件的句柄
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr = m_pVW->put_Owner((OAHWND)m_hWnd);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (FAILED(hr)) return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (FAILED(hr)) return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (m_pVW)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        CRect rc;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        ::GetClientRect(m_hWnd,
&rc);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        m_pVW
->SetWindowPosition(00, rc.right, rc.bottom);//让图像充满整个窗口
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    }
 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pVW->put_Visible(OATRUE);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
//*********开始视频捕捉********//
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr = m_pMC->Run();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if(FAILED(hr))
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        AfxMessageBox(
"Couldn't run the graph!");
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    bIsVideoOpen 
= TRUE;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
return S_OK;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记HRESULT CCaptureVideo::InitCaptureGraphBuilder()
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HRESULT hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// 创建IGraphBuilder接口
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGB);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// 创建ICaptureGraphBuilder2接口
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,IID_ICaptureGraphBuilder2, (void **&m_pCapture);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (FAILED(hr)) return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_pCapture
->SetFiltergraph(m_pGB);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGB->QueryInterface(IID_IMediaControl, (void **)&m_pMC);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (FAILED(hr)) return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= m_pGB->QueryInterface(IID_IVideoWindow, (LPVOID *)&m_pVW);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (FAILED(hr)) return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
return hr;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
bool  CCaptureVideo::BindFilter( int  deviceId, IBaseFilter  ** pFilter)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (deviceId < 0return false;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
// enumerate all video capture devices
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    CComPtr<ICreateDevEnum> pCreateDevEnum;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HRESULT hr 
= CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum, (void**)&pCreateDevEnum);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (hr != NOERROR)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return false;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    CComPtr
<IEnumMoniker> pEm;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    hr 
= pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (hr != NOERROR) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
return false;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    pEm
->Reset();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    ULONG cFetched;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    IMoniker 
*pM;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
int index = 0;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
while(hr = pEm->Next(1&pM, &cFetched), hr==S_OK, index <= deviceId)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        IPropertyBag 
*pBag;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        hr 
= pM->BindToStorage(00, IID_IPropertyBag, (void **)&pBag);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
if(SUCCEEDED(hr)) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            VARIANT var;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            var.vt 
= VT_BSTR;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            hr 
= pBag->Read(L"FriendlyName"&var, NULL);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            
if (hr == NOERROR) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记                
if (index == deviceId)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记                
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记                    pM
->BindToObject(00, IID_IBaseFilter, (void**)pFilter);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记                }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记                SysFreeString(var.bstrVal);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记            pBag
->Release();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        pM
->Release();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        index
++;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
return true;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
void  CCaptureVideo::FreeMediaType(AM_MEDIA_TYPE &  mt)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (mt.cbFormat != 0
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        CoTaskMemFree((PVOID)mt.pbFormat);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        
// Strictly unnecessary but tidier
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
        mt.cbFormat = 0;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        mt.pbFormat 
= NULL;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
if (mt.pUnk != NULL) 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        mt.pUnk
->Release();
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记        mt.pUnk 
= NULL;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    }

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}
 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
void  CCaptureVideo::SwitchImageProcess(BOOL bprocess)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    bIsImageProcess 
= bprocess;
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
//////////////////////////////////////////////////////////////////////////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
/////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
/////////                         数字图像处理       
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
////////
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
///////////////////////////////////////////////////////////////////////////////

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 void  CCaptureVideo::ImageProcessing(unsigned  char * m_pDibBits,  int  m_height,  int  m_width)
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{    
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    CImageProcess::ColorToGray(m_pDibBits,m_height, m_width); 
//彩色转灰度
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
    CImageProcess::ConvertGrayToWhiteBlack(m_pDibBits, m_height, m_width, 120); //二值化
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记


Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记 主程序
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记#ifdef _DEBUG
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#pragma  comment(lib,"strmbasd.lib")
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#else
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#pragma  comment(lib,"STRMBASE.lib")
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#endif
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#pragma  comment(lib,"strmiids.lib")
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
#pragma  comment(lib,"quartz.lib")
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
void  CUSBShowDlg::OnBUTTONOpenVideo()  // 打开摄像头
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HWND hWnd 
= m_StaticShow.GetSafeHwnd(); 
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    HRESULT hr 
= m_cap.Init(0,hWnd); //DirectShow初始化
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
void  CUSBShowDlg::OnBUTTONImageProcess()  // 启动数字图像处理开关
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记
{
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记    m_cap.SwitchImageProcess(TRUE);
Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记}

Direct Show采集图像实例 _ JavaClub全栈架构师技术笔记

来源链接:https://www.cnblogs.com/wqj1212/archive/2008/04/01/1133116.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/124677.html

标签: Unnecessary
分享给朋友: