65.9K
CodeProject 正在变化。 阅读更多。
Home

AVI2BMP

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.88/5 (12投票s)

2004年7月4日

CPOL
viewsIcon

73744

downloadIcon

3097

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();

历史

好的!我想修正一些错误处理程序,但可能下次再说。

© . All rights reserved.