75 lines
1.5 KiB
C++
75 lines
1.5 KiB
C++
// BmpToAvi.cpp: implementation of the CBmpToAvi class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
//#include "stdafx.h"
|
|
#include "BmpToAvi.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
AVISTREAMINFO CBmpToAvi::m_si;
|
|
|
|
CBmpToAvi::CBmpToAvi()
|
|
{
|
|
m_pfile = NULL;
|
|
m_pavi = NULL;
|
|
AVIFileInit();
|
|
}
|
|
|
|
CBmpToAvi::~CBmpToAvi()
|
|
{
|
|
|
|
AVIFileExit();
|
|
}
|
|
|
|
bool CBmpToAvi::Open( LPCTSTR szFile, LPBITMAPINFO lpbmi )
|
|
{
|
|
if (szFile == NULL)
|
|
return false;
|
|
m_nFrames = 0;
|
|
|
|
if (AVIFileOpen(&m_pfile, szFile, OF_WRITE | OF_CREATE, NULL))
|
|
return false;
|
|
|
|
m_si.fccType = streamtypeVIDEO;
|
|
m_si.fccHandler = BI_RGB;
|
|
m_si.dwScale = 1;
|
|
m_si.dwRate = 5; // ÿÃë5Ö¡
|
|
SetRect(&m_si.rcFrame, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);
|
|
m_si.dwSuggestedBufferSize = lpbmi->bmiHeader.biSizeImage;
|
|
|
|
|
|
if (AVIFileCreateStream(m_pfile, &m_pavi, &m_si))
|
|
return false;
|
|
|
|
|
|
if (AVIStreamSetFormat(m_pavi, 0, lpbmi, sizeof(BITMAPINFO)) != AVIERR_OK)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CBmpToAvi::Write(LPVOID lpBuffer)
|
|
{
|
|
if (m_pfile == NULL || m_pavi == NULL)
|
|
return false;
|
|
|
|
return AVIStreamWrite(m_pavi, m_nFrames++, 1, lpBuffer, m_si.dwSuggestedBufferSize, AVIIF_KEYFRAME, NULL, NULL) == AVIERR_OK;
|
|
}
|
|
|
|
|
|
void CBmpToAvi::Close()
|
|
{
|
|
if (m_pavi)
|
|
{
|
|
AVIStreamRelease(m_pavi);
|
|
m_pavi = NULL;
|
|
}
|
|
if (m_pfile)
|
|
{
|
|
AVIFileRelease(m_pfile);
|
|
m_pfile = NULL;
|
|
}
|
|
} |