如果不嫌麻煩的話,可以直接用renderfile來播放影像,先暫停,然後用sampleGrabber來抓圖,這樣就可以得到第一幀的圖片
一般的软件播放器就是这样,打开一个媒体文件之后,先将filter graph暂停,这样这个媒体文件的第一帧自然就显示出来了。
if(no>120) exit(0);
sprintf(file_name,"image%03d.ppm",no++);
save_ppm(file_name,_pixbuf);
做一个save_ppm的函数,当no=1时就是第一张图
楼上的,用vfw编程来做啊. avi格式...
PAVIFILE pfile;//Pointer to a buffer that receives the new IAVIFile interface pointer.
AVIFILEINFO pfi;
PAVISTREAM pavi;
PGETFRAME pgf;
long length, start;
//initializes the AVIFile library,as AVIFileExit()。
//Call AVIFileInit() before using any other AVIFile functions
AVIFileInit();
AVIFileOpen(&pfile,m_avifile,OF_READ |OF_SHARE_DENY_NONE,NULL);
//obtains information about an AVI file
AVIFileInfo(pfile,&pfi,sizeof(AVIFILEINFO));
AVIFileGetStream(pfile,&pavi,streamtypeVIDEO,0);
length=AVIStreamLength(pavi);
start=AVIStreamStart(pavi);
AVISTREAMINFO si;
AVIStreamInfo(pavi, &si, sizeof(si));
pgf = AVIStreamGetFrameOpen(pavi, NULL);
//GET FIRST BMP
LPBITMAPINFOHEADER bmp1;
bmp1= (LPBITMAPINFOHEADER)AVIStreamGetFrame(pgf, 0);
一般的软件播放器就是这样,打开一个媒体文件之后,先将filter graph暂停,这样这个媒体文件的第一帧自然就显示出来了。
if(no>120) exit(0);
sprintf(file_name,"image%03d.ppm",no++);
save_ppm(file_name,_pixbuf);
做一个save_ppm的函数,当no=1时就是第一张图
楼上的,用vfw编程来做啊. avi格式...
PAVIFILE pfile;//Pointer to a buffer that receives the new IAVIFile interface pointer.
AVIFILEINFO pfi;
PAVISTREAM pavi;
PGETFRAME pgf;
long length, start;
//initializes the AVIFile library,as AVIFileExit()。
//Call AVIFileInit() before using any other AVIFile functions
AVIFileInit();
AVIFileOpen(&pfile,m_avifile,OF_READ |OF_SHARE_DENY_NONE,NULL);
//obtains information about an AVI file
AVIFileInfo(pfile,&pfi,sizeof(AVIFILEINFO));
AVIFileGetStream(pfile,&pavi,streamtypeVIDEO,0);
length=AVIStreamLength(pavi);
start=AVIStreamStart(pavi);
AVISTREAMINFO si;
AVIStreamInfo(pavi, &si, sizeof(si));
pgf = AVIStreamGetFrameOpen(pavi, NULL);
//GET FIRST BMP
LPBITMAPINFOHEADER bmp1;
bmp1= (LPBITMAPINFOHEADER)AVIStreamGetFrame(pgf, 0);