12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include "StdAfx.h"
- #include "SampleGrabberCB.h"
- BOOL bOneShot = FALSE;
- CSampleGrabberCB mCB;
- CSampleGrabberCB::CSampleGrabberCB(void)
- {
- _tcscpy_s(m_szFileName, _T("c:\\donaldo.bmp"));
- }
- CSampleGrabberCB::~CSampleGrabberCB(void)
- {
- }
- STDMETHODIMP CSampleGrabberCB::BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
- {
- if( !bOneShot )
- return 0;
- if (!pBuffer)
- return E_POINTER;
- SaveBitmap(pBuffer, lBufferSize);
- bOneShot = FALSE;
- return 0;
- }
- //创建位图文件
- BOOL CSampleGrabberCB::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;
- }
|