怎样将多幅图片结合在一起生成AVI文件!通过其它播放软件可直接播放
解决方案 »
- DLL程序内部可不可以传递消息?
- 我要像qq一样的源代码
- 奇怪的内存泄漏!请大家过来看看!
- 这则运算怎么做?
- 怎样获取这段BYTE型所占的大小?100分相赠!
- 写一个单文档的数字图象采集卡的程序,检测设备的这一部分应该放在什么地方?
- 如何变更图片!!!!!!小题高分
- 全局变量新问题,高手帮忙
- 在基于对话框的程序中如何将注**册**表中某主键下所有子键逐一读出。
- 高分请教一个问题:CComBSTR、_bstr_t、BSTR、LPCTSTR、LPSTR、char *、CString等的关系?
- 如何设Dialog的边框像XP一样呈凸模式,
- windows系统自带的DLL和visual studio.net(version 2002)自带的DLL有什么不同啊
// 详细请参考MSDN中Video for Windows的说明
BOOL SaveAVI()
{
PAVIFILE pf = NULL; // AVI File.
PAVISTREAM ps = NULL; // AVI Stream.
PAVISTREAM psCompressed = NULL; // AVI Stream for Commpression.
HRESULT hr = NULL;
BOOL br = TRUE;
LONG nImageNO = 0;
int NumOfImages = 10; // 10 Images// Initialize the AVI library.
AVIFileInit();
// Create new AVI file using AVIFileOpen.
hr = AVIFileOpen(&pf, "Sample AVI.avi", OF_WRITE | OF_CREATE, NULL);
if (hr != 0) goto EXIT_AVI;
for (nImageNO = 0; nImageNO < NumOfImages; nImageNO++)
{
TCHAR strFileName[10];
sprintf("%.3d.bmp", strFileName); // Read the stream data.
CFile SrcFile(strFileName, CFile::modeRead);
UINT FileLength = SrcFile.GetLength();
SrcFile.Seek(sizeof(BITMAPFILEHEADER), CFile::begin); // Windows DIB format.
HGLOBAL hDIB =
GlobalAlloc(GMEM_MOVEABLE, FileLength - sizeof(BITMAPFILEHEADER));
CHAR* pBuffer = (CHAR*)GlobalLock(hDIB);
SrcFile.Read(pBuffer, FileLength - sizeof(BITMAPFILEHEADER));
BITMAPINFO * pInfo =(BITMAPINFO*)pBuffer;
CHAR * pBits =
(CHAR*) pInfo + sizeof(BITMAPINFOHEADER) +
pInfo->bmiHeader.biClrUsed * sizeof(RGBQUAD); // And create the stream. This job will be done only once.
if (nImageNO == 0)
{
AVISTREAMINFO strhdr;
memset(&strhdr, 0, sizeof(strhdr));
strhdr.fccType = streamtypeVIDEO;
strhdr.fccHandler = 0;
strhdr.dwFlags = NULL;
strhdr.dwCaps = NULL;
strhdr.wPriority = NULL;
strhdr.wLanguage = NULL;
strhdr.dwScale = 1;
strhdr.dwRate = 25; // Frames per second
strhdr.dwStart = 0;
strhdr.dwLength = NumOfImages;
strhdr.dwInitialFrames = 0;
strhdr.dwSuggestedBufferSize = pInfo->bmiHeader.biSizeImage;
strhdr.dwQuality = 10000;
strhdr.dwSampleSize = 0;
strhdr.dwEditCount = 0;
strhdr.dwFormatChangeCount = 0;
strcpy(strhdr.szName, "AVI VIDEO #1");
SetRect(&strhdr.rcFrame, 0, 0,
(int)(pInfo->bmiHeader.biWidth),
(int)(pInfo->bmiHeader.biHeight));
// Create a stream using AVIFileCreateStream.
hr = AVIFileCreateStream(pf, &ps, &strhdr);
if (hr != 0)
goto EXIT_AVI;
AVICOMPRESSOPTIONS opts;
AVICOMPRESSOPTIONS FAR * aopts[1] = {&opts};
memset(&opts, 0, sizeof(opts));
br = AVISaveOptions(
NULL, 0, 1, &ps, (LPAVICOMPRESSOPTIONS FAR *) &aopts);
if (!br) goto EXIT_AVI; hr = AVIMakeCompressedStream(&psCompressed, ps, &opts, NULL);
if (hr != 0) goto EXIT_AVI;
// Set format of new stream using AVIStreamSetFormat.
hr = AVIStreamSetFormat(
ps, 0, &(pInfo->bmiHeader),
pInfo->bmiHeader.biSize +
pInfo->bmiHeader.biClrUsed * sizeof(RGBQUAD));
if (hr != 0) goto EXIT_AVI;
}
// Save the data using AVIStreamWrite.
hr = AVIStreamWrite(ps, nImageNO, 1, pBits,
pInfo->bmiHeader.biSizeImage, AVIIF_KEYFRAME, NULL, NULL);
ASSERT(hr == 0);
GlobalUnlock(hDIB);
GlobalFree(hDIB);
}
EXIT_AVI:
// Close the stream and file.
if (psCompressed)
AVIStreamRelease(psCompressed);
if (ps)
AVIStreamRelease(ps);
if (pf)
AVIFileRelease(pf);
AVIFileExit();
if (hr == 0 && br == TRUE)
return TRUE;
else
return FALSE;
}
Header: Declared in Vfw.h.
Library: Use Vfw32.lib.
sprintf("%.3d.bmp", strFileName);改成sprintf(strFileName, "%.3d.bmp", nImageNO);如果文件不存在,可能会造成错误,请注意判断。