AVI2BMP






1.88/5 (12投票s)
AVI文件到BMP文件(们)的转换器。
引言
这是一个非常小的控制台程序,用于将AVI格式的视频转换为BMP文件或文件们。我想我能说的就是这些了。哦,还有一件事。我使用一些pragma指令来减小程序的大小。就这些了。
使用代码
好的!在我的程序中,我使用标准方法从AVI文件中提取一帧并将其保存到BMP文件中。其中没有什么特别或秘密的。只是标准的Win32 API和VFW API。就这些了!
// Some steps:
char AVIFileName[_SIZE]={0};
AVIFILE aviFile;
PAVISTREAM aviStream;
AVISTREAMINFO aviStreamInfo;
AVIFileInit();
AVIFileOpen(&aviFile,AVIFileName,OF_READ,NULL);
AVIFileGetStream(aviFile,&aviStream,streamtypeVIDEO,0);
AVIFileRelease(aviFile);
AVIStreamInfo(aviStream,&aviStreamInfo,sizeof(aviStreamInfo));
// OK! Now we can extract any frame from AVI stream!
BITMAPFILEHEADER BMPFileHeader;
LPBITMAPINFOHEADER lpbi;
PGETFRAME pgf;
pgf=AVIStreamGetFrameOpen(aviStream,NULL);
lpbi=(LPBITMAPINFOHEADER)AVIStreamGetFrame(pgf,fr);
BMPFileHeader.bfType=0x4d42;
BMPFileHeader.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+lpbi->biSize+
lpbi->biClrUsed*sizeof(RGBQUAD)+lpbi->biSizeImage);
BMPFileHeader.bfReserved1=0;
BMPFileHeader.bfReserved2=0;
BMPFileHeader.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpbi->biSize+
lpbi->biClrUsed*sizeof(RGBQUAD);
// Than create file to save frame and write BMP sections into it!
WriteFile(hFile,(LPVOID)&BMPFileHeader,sizeof(BITMAPFILEHEADER),
(LPDWORD)&lpNumberOfBytesWritten,NULL);
WriteFile(hFile,(LPVOID)lpbi,sizeof(BITMAPFILEHEADER)+lpbi->biSize+
lpbi->biClrUsed*sizeof(RGBQUAD)+lpbi->biSizeImage,
(LPDWORD)&lpNumberOfBytesWritten,NULL);
// And in the end make some clean!
AVIStreamGetFrameClose(pgf);
// We can save one more frame or finish or work.
AVIFileExit();
历史
好的!我想修正一些错误处理程序,但可能下次再说。