📄 avigenerator.h
字号:
// AVIGenerator.h: interface for the CAVIGenerator class.
//
// A class to easily create AVI
//
// Original code : Example code in WriteAvi.c of MSDN
//
// Author : Jonathan de Halleux. dehalleux@auto.ucl.ac.be
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_AVIGENERATOR_H__6BAF2E9D_3866_4779_A43B_D1B21E7E4F39__INCLUDED_)
#define AFX_AVIGENERATOR_H__6BAF2E9D_3866_4779_A43B_D1B21E7E4F39__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// needed headers
#include <comdef.h>
#include <memory.h>
#include <tchar.h>
#include <string.h>
#include <vfw.h>
#pragma message(" _Adding library: vfw32.lib" )
#pragma comment ( lib, "vfw32.lib")
// undefine this if you don't use MFC
#define _AVIGENERATOR_USE_MFC
/*! \brief A simple class to create AVI video stream.
\par Usage
Step 1 : Declare an CAVIGenerator object
Step 2 : Set Bitmap by calling SetBitmapHeader functions + other parameters
Step 3 : Initialize engine by calling InitEngine
Step 4 : Send each frames to engine with function AddFrame
Step 5 : Close engine by calling ReleaseEngine
\par Demo Code:
\code
CAVIGenerator AviGen;
BYTE* bmBits;
// set characteristics
AviGen.SetRate(20); // set 20fps
AviGen.SetBitmapHeader(GetActiveView()); // give info about bitmap
AviGen.InitEngine();
..... // Draw code, bmBits is the buffer containing the frame
AviGen.AddFrame(bmBits);
.....
AviGen.ReleaseEngine();
\endcode
\par Update history:
- {\bf 22-10-2002} Minor changes in constructors.
\author : Jonathan de Halleux, dehalleux@auto.ucl.ac.be (2001)
*/
class CAVIGenerator
{
public:
//! \name Constructors and destructors
//@{
//! Default constructor
CAVIGenerator();
#ifdef _AVIGENERATOR_USE_MFC
//! Inplace constructor with CView
CAVIGenerator(LPCTSTR sFileName, CView* pView, DWORD dwRate);
#endif
//! Inplace constructor with BITMAPINFOHEADER
CAVIGenerator(LPCTSTR sFileName, LPBITMAPINFOHEADER lpbih, DWORD dwRate);
~CAVIGenerator();
//@}
//! \name AVI engine function
//@{
/*! \brief Initialize engine and choose codex
Some asserts are made to check that bitmap has been properly initialized
*/
HRESULT InitEngine();
/*! \brief Adds a frame to the movie.
The data pointed by bmBits has to be compatible with the bitmap description of the movie.
*/
HRESULT AddFrame(BYTE* bmBits);
//! Release ressources allocated for movie and close file.
void ReleaseEngine();
//@}
//! \name Setters and getters
//@{
//! Sets bitmap info to match pView dimension.
void SetBitmapHeader(CView* pView);
//! Sets bitmap info as in lpbih
void SetBitmapHeader(LPBITMAPINFOHEADER lpbih);
//! returns a pointer to bitmap info
LPBITMAPINFOHEADER GetBitmapHeader() { return &m_bih;};
//! sets the name of the ouput file (should be .avi)
void SetFileName(LPCTSTR _sFileName) { m_sFile=_sFileName; MakeExtAvi();};
//! Sets FrameRate (should equal or greater than one)
void SetRate(DWORD dwRate) { m_dwRate=dwRate;};
//@}
//! \name Error handling
//@{
//! returns last error message
LPCTSTR GetLastErrorMessage() const { return m_sError;};
//@}
protected:
//! name of output file
_bstr_t m_sFile;
//! Frame rate
DWORD m_dwRate;
//! structure contains information for a single stream
BITMAPINFOHEADER m_bih;
//! last error string
_bstr_t m_sError;
private:
void MakeExtAvi();
//! frame counter
long m_lFrame;
//! file interface pointer
PAVIFILE m_pAVIFile;
//! Address of the stream interface
PAVISTREAM m_pStream;
//! Address of the compressed video stream
PAVISTREAM m_pStreamCompressed;
};
#endif // !defined(AFX_AVIGENERATOR_H__6BAF2E9D_3866_4779_A43B_D1B21E7E4F39__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -