2,543
社区成员
发帖
与我相关
我的任务
分享
AVIFileInit(); //初始化环境
PAVIFILE aviFile;
PAVISTREAM aviVideoStream;
//创建AVI文件
if(AVIFileOpen(&aviFile,"output.avi",OF_CREATE|OF_WRITE,0))
{
::MessageBox(NULL,"Error when creating file output.avi",NULL,0);
return;
}
//设置视频流格式
AVISTREAMINFO aviVideoStreamInfo;
aviVideoStreamInfo.fccType = streamtypeVIDEO;
aviVideoStreamInfo.fccHandler = 0;
aviVideoStreamInfo.dwFlags = 0;
aviVideoStreamInfo.dwCaps = 0;
aviVideoStreamInfo.wPriority = 0;
aviVideoStreamInfo.wLanguage = 0;
aviVideoStreamInfo.dwScale = 1;
aviVideoStreamInfo.dwRate = 5; //每秒5帧
aviVideoStreamInfo.dwStart = 0;
aviVideoStreamInfo.dwLength = 0;
aviVideoStreamInfo.dwInitialFrames = 0;//初始帧
aviVideoStreamInfo.dwSuggestedBufferSize=0;
aviVideoStreamInfo.dwQuality = 0;
aviVideoStreamInfo.dwSampleSize = 0;
aviVideoStreamInfo.rcFrame.left = 0;
aviVideoStreamInfo.rcFrame.top = 0;
aviVideoStreamInfo.rcFrame.right = width;
aviVideoStreamInfo.rcFrame.bottom = height;
aviVideoStreamInfo.dwEditCount = 0;
aviVideoStreamInfo.dwFormatChangeCount = 0;
strcpy((char *)aviVideoStreamInfo.szName,"output.avi");
//创建数据流
AVIFileCreateStream(aviFile,
&aviVideoStream,
(AVISTREAMINFO*)&aviVideoStreamInfo);
//设置位图格式
LPVOID pBits=NULL;
BITMAPINFO bmpInfo;
ZeroMemory(&bmpInfo,sizeof(bmpInfo));
bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biBitCount=32;
bmpInfo.bmiHeader.biCompression=BI_RGB;
bmpInfo.bmiHeader.biSizeImage=width*height*bmpInfo.bmiHeader.biBitCount/8;
bmpInfo.bmiHeader.biPlanes=1;
bmpInfo.bmiHeader.biHeight=height;
bmpInfo.bmiHeader.biWidth=width;
//创建位图
HBITMAP hBmp=CreateDIBSection(memDC,
&bmpInfo,
DIB_RGB_COLORS,
&pBits,
NULL,
NULL);
memDC.SelectObject(hBmp);
//字体
LOGFONT lf;
lf.lfHeight = -300;
lf.lfWidth = 0;
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfWeight = FW_DONTCARE;
lf.lfItalic = 0;
lf.lfUnderline = 0;
lf.lfStrikeOut = 0;
lf.lfCharSet = DEFAULT_CHARSET ;
strcpy ( lf.lfFaceName, "楷体_GB2312" );
//创建字体并选中
CFont newFont;
if (! newFont.CreateFontIndirect (&lf))
return;
CFont* pOldFont = memDC.SelectObject (&newFont);
CRect rect(0,0,width,height);
CBrush b(RGB(255,255,255));
CString str;
int aviVideoFrame=0;
while(aviVideoFrame<100)
{
str.Format("%d",aviVideoFrame);
memDC.FillRect(&rect,&b);
memDC.DrawText(str,&rect,DT_CENTER | DT_VCENTER);
//设置帧格式
AVIStreamSetFormat(aviVideoStream,
aviVideoFrame,
&bmpInfo,
sizeof(bmpInfo));
//写数据
AVIStreamWrite(aviVideoStream,
aviVideoFrame,
1,
(LPBYTE)pBits,
bmpInfo.bmiHeader.biSizeImage,
AVIIF_KEYFRAME,
NULL,
NULL);
aviVideoFrame++;
}
//恢复字体
memDC.SelectObject(pOldFont);
//释放数据流及文件
if(aviVideoStream)
{
aviVideoStream->Release();
aviVideoStream = NULL;
}
if(aviFile)
{
aviFile->Release();
aviFile = NULL;
}
AVIFileExit();