Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2658703
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: WINDOWS

2007-01-26 15:22:38

曾经在http://www.vckbase.com/document/viewdoc/?id=976上看到抓取影片帧,想实现抓取影片所有帧,在前面的帮助提示下,进行了比较小的改动,其如下:

一、存取路径:
void CFrameGrabberDlg::OnSaveBrowse()
{
 char szDir[MAX_PATH];
 BROWSEINFO bi;
 ITEMIDLIST *pidl;
 bi.hwndOwner = this->m_hWnd;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = szDir;
 bi.lpszTitle = "请选择受控的目录";//strDlgTitle;
 bi.ulFlags = BIF_RETURNONLYFSDIRS;
 bi.lpfn = NULL;
 bi.lParam = 0;
 bi.iImage = 0;
 pidl = SHBrowseForFolder(&bi);
 if(pidl == NULL)
  return;
 if(!SHGetPathFromIDList(pidl, szDir))
  return;
 m_editSaveDir.Format("%s",szDir);
 
 UpdateData(FALSE);
}
二、点击抓取时:
void CFrameGrabberDlg::OnGrab()
{
 UpdateData();//新增加,得到两参数值

三、输出系统系列图片:
get_StreamLength这个函数是取得视频文件的持续时间,单位为秒,get_FrameRate这个函数是取得帧率,把这两个函数得到的值相乘,便可以得到视频文件总的帧数。但是WriteBitmapBits这个函数的第一个参数是时间,而不是帧的序号,而且这个时间单位就是帧号与帧率之除,具体实现如下:

 double totalTime,dRate;
 pDet->get_FrameRate(&dRate);
 pDet->get_StreamLength(&totalTime);
 // 将第一帧保存为指定路径的位图文件
 for(i=0;i {
  CString str;
  str.Format("%s%d.bmp",m_editSaveDir,i);
  double position = (double)(i/dRate);
  CComBSTR saveBSTR(str);
  hr = pDet->WriteBitmapBits(position, width, height, saveBSTR);
 }
阅读(2400) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-06-17 00:12:30

www.fendsell.com Hi friend:I find a shop,there have some Christian Louboutin shoes,UGG shoes and some bags ,they looks very well,the price is cheap ,if you have somg time,you can go to there to have a look.www.fendsell.com