資源簡介
vc++調用usb攝像頭,進行拍照,保存為bmp文件

代碼片段和文件信息
//-------------------------------------------------------------------
//?CCaptureVideo視頻捕捉類實現文件CaptureVideo.cpp
//-------------------------------------------------------------------
//?CaptureVideo.cpp:?implementation?of?the?CCaptureVideo?class.
//
/////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“CaptureVideo.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
BOOL?bOneShot=FALSE;//全局變量
class?CSampleGrabberCB?:?public?ISampleGrabberCB?
{
public:
long?lWidth;
long?lHeight;
TCHAR?m_szFileName[MAX_PATH];//?位圖文件名稱
CSampleGrabberCB(?)
{
strcpy(m_szFileName?“c:\\donaldo.bmp“);
}?
STDMETHODIMP_(ULONG)?AddRef()?{?return?2;?}
STDMETHODIMP_(ULONG)?Release()?{?return?1;?}
STDMETHODIMP?QueryInterface(REFIID?riid?void?**?ppv)
{
if(?riid?==?IID_ISampleGrabberCB?||?riid?==?IID_IUnknown?)
{?
*ppv?=?(void?*)?static_cast?(?this?);
return?NOERROR;
}?
return?E_NOINTERFACE;
}
STDMETHODIMP?SampleCB(?double?SampleTime?IMediaSample?*?pSample?)
{
return?0;
}
STDMETHODIMP?BufferCB(?double?dblSampleTime?BYTE?*?pBuffer?long?lBufferSize?)
{
if(?!bOneShot?)return?0;
if?(!pBuffer)return?E_POINTER;
SaveBitmap(pBuffer?lBufferSize);
bOneShot?=?FALSE;
return?0;
}
//創建位圖文件
BOOL?SaveBitmap(BYTE?*?pBuffer?long?lBufferSize?)
{
HANDLE?hf?=?CreateFile(
m_szFileName?GENERIC_WRITE?FILE_SHARE_READ?NULL
CREATE_ALWAYS?NULL?NULL?);
if(?hf?==?INVALID_HANDLE_VALUE?)return?0;
//?寫文件頭?
BITMAPFILEHEADER?bfh;
memset(?&bfh?0?sizeof(?bfh?)?);
bfh.bfType?=‘MB‘;
bfh.bfSize?=?sizeof(?bfh?)?+?lBufferSize?+?sizeof(?BITMAPINFOHEADER?);
bfh.bfOffBits?=?sizeof(?BITMAPINFOHEADER?)?+?sizeof(?BITMAPFILEHEADER?);
DWORD?dwWritten?=?0;
WriteFile(?hf?&bfh?sizeof(?bfh?)?&dwWritten?NULL?);
//?寫位圖格式
BITMAPINFOHEADER?bih;
memset(?&bih?0?sizeof(?bih?)?);
bih.biSize?=?sizeof(?bih?);
bih.biWidth?=?lWidth;
bih.biHeight?=?lHeight;
bih.biPlanes?=?1;
bih.biBitCount?=?24;
WriteFile(?hf?&bih?sizeof(?bih?)?&dwWritten?NULL?);
//?寫位圖數據
WriteFile(?hf?pBuffer?lBufferSize?&dwWritten?NULL?);
CloseHandle(?hf?);
return?0;
}
};
CSampleGrabberCB?mCB;
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCaptureVideo::CCaptureVideo()
{
//COM?Library?Intialization
if(FAILED(CoInitialize(NULL)))?/*?COINIT_APARTMENTTHREADED)))*/
{
AfxMessageBox(“CoInitialize?Failed!\r\n“);?
return;
}
m_hWnd?=?NULL;
m_pVW?=?NULL;
m_pMC?=?NULL;
m_pGB?=?NULL;
m_pCapture?=?NULL;?
}
CCaptureVideo::~CCaptureVideo()
{
//?Stop?media?playback
if(m_pMC)m_pMC->Stop();
if(m_pVW)
{
m_pVW->put_Visible(OAFALSE);
m_pVW->put_Owner(NULL);
}
srelease(m_pCapture);
srelease(m_pMC);
srelease(m_pGB)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????8913??2007-10-18?18:41??test\CaptureVideo.cpp
?????文件???????1447??2007-10-18?18:42??test\CaptureVideo.h
?????文件??????77105??2007-10-18?19:12??test\Debug\CaptureVideo.obj
?????文件??????????0??2007-10-18?19:12??test\Debug\CaptureVideo.sbr
?????文件?????105731??2007-10-18?19:12??test\Debug\StdAfx.obj
?????文件????1375518??2007-10-18?19:12??test\Debug\StdAfx.sbr
?????文件????6358016??2007-10-18?19:17??test\Debug\test.bsc
?????文件?????131115??2007-10-19?13:37??test\Debug\test.exe
?????文件?????437896??2007-10-19?13:37??test\Debug\test.ilk
?????文件??????42141??2007-10-18?19:13??test\Debug\test.obj
?????文件????6890572??2007-10-18?19:12??test\Debug\test.pch
?????文件?????558080??2007-10-19?13:37??test\Debug\test.pdb
?????文件???????2612??2007-10-19?13:37??test\Debug\test.res
?????文件??????????0??2007-10-18?19:13??test\Debug\test.sbr
?????文件??????55355??2007-10-18?19:17??test\Debug\testDlg.obj
?????文件??????????0??2007-10-18?19:17??test\Debug\testDlg.sbr
?????文件?????312320??2011-12-24?00:05??test\Debug\vc60.idb
?????文件?????626688??2007-10-18?19:17??test\Debug\vc60.pdb
?????文件?????401484??2004-03-18?18:36??test\msvcrtd.dll文件\msvcrtd.dll
?????文件?????????40??2007-12-21?20:47??test\msvcrtd.dll文件\安裝.bat
?????文件???????3543??2007-10-18?18:56??test\ReadMe.txt
?????文件???????1078??2007-10-18?18:56??test\res\test.ico
?????文件????????396??2007-10-18?18:56??test\res\test.rc2
????..A.SH.??????3072??2011-05-18?08:49??test\res\Thumbs.db
?????文件????????820??2007-10-18?18:59??test\resource.h
?????文件????????206??2007-10-18?18:56??test\StdAfx.cpp
?????文件???????1054??2007-10-18?18:56??test\StdAfx.h
?????文件??????20884??2011-12-23?23:59??test\test.aps
?????文件???????1211??2011-12-24?00:06??test\test.clw
?????文件???????2035??2007-10-18?18:56??test\test.cpp
............此處省略18個文件信息
- 上一篇:C++。電信計費系統
- 下一篇:c++貪吃蛇編程源代碼論文設計c語言
評論
共有 條評論