中易网

C++来获取AVI文件的一桢图象

答案:2  悬赏:50  
解决时间 2021-04-27 21:52
我在网上看到了这样一段代码,但是不明白Cbmp2aviDlg的基类是什么?avifileopen中strAVIFileName参数应该怎么写?比如avi文件在D盘a文件夹下。求大侠指点,谢谢

这是那段代码的地址:
http://zhidao.baidu.com/question/8252506.html
最佳答案
Cbmp2aviDlg的基类必须是mfc的对话框基类 CDlg,至于strAVIFileName你可以写绝对路径或者相对路径,绝对路径靠谱一点 d:/a/文件.avi or d:\\a\\文件.av
全部回答
给你个例子哈 void cbmp2avidlg::avitobmp(cstring stravifilename, cstring strbmpdir) { // todo: 在此添加控件通知处理程序代码 avifileinit(); pavifile avi; int res=avifileopen(&avi, stravifilename, of_read, null); int n = getlasterror(); if (res!=avierr_ok) { //an error occures if (avi!=null) avifilerelease(avi); return ; } avifileinfo avi_info; avifileinfo(avi, &avi_info, sizeof(avifileinfo)); pavistream pstream; res=avifilegetstream(avi, &pstream, streamtypevideo , 0 ); if (res!=avierr_ok) { if (pstream!=null) avistreamrelease(pstream); avifileexit(); return ; } //do some task with the stream int inumframes; int ifirstframe; ifirstframe=avistreamstart(pstream); if (ifirstframe==-1) { //error getteing the frame inside the stream if (pstream!=null) avistreamrelease(pstream); avifileexit(); return ; } inumframes=avistreamlength(pstream); if (inumframes==-1) { //error getteing the number of frames inside the stream if (pstream!=null) avistreamrelease(pstream); avifileexit(); return ; } //getting bitmap from frame bitmapinfoheader bih; zeromemory(&bih, sizeof(bitmapinfoheader)); bih.bibitcount=24; //24 bit per pixel bih.biclrimportant=0; bih.biclrused = 0; bih.bicompression = bi_rgb; bih.biplanes = 1; bih.bisize = 40; bih.bixpelspermeter = 0; bih.biypelspermeter = 0; //calculate total size of rgbquad scanlines (dword aligned) bih.bisizeimage = (((bih.biwidth * 3) + 3) & 0xfffc) * bih.biheight ; pgetframe pframe; pframe=avistreamgetframeopen(pstream, null ); avistreaminfo streaminfo; avistreaminfo(pstream,&streaminfo,sizeof(avistreaminfo)); //get the first frame bitmapinfoheader bih2; long lsize = sizeof(bih2); int index=0; for (int i=ifirstframe; i<inumframes; i++) { index= i-ifirstframe; byte* pdib = (byte*) avistreamgetframe(pframe, index); // avistreamreadformat(pstream,index,&bih2,&lsize); bitmapfileheader stfilehdr; byte* bits=new byte[bih2.bisizeimage]; avistreamread(pstream,index,1,bits,bih2.bisizeimage,null,null); //rtlmovememory(bits, pdib + sizeof(bitmapinfoheader), bih2.bisizeimage); bih2.biclrused =0; stfilehdr.bfoffbits=sizeof(bitmapfileheader)+sizeof(bitmapinfoheader); stfilehdr.bfsize=sizeof(bitmapfileheader); stfilehdr.bftype=0x4d42; cstring filename; filename.format("frame-%05d.bmp", index); cstring strtemp = strbmpdir; strtemp += ""; strtemp += filename; file* fp=_tfopen(strtemp ,_t("wb")); fwrite(&stfilehdr,1,sizeof(bitmapfileheader),fp); fwrite(&bih2,1,sizeof(bitmapinfoheader),fp); int ff = fwrite(bits,1,bih2.bisizeimage,fp); int e = getlasterror(); fclose(fp); ///// delete bits; //createfrompackeddibpointer(pdib, index); } avistreamgetframeclose(pframe); //close the stream after finishing the task if (pstream!=null) avistreamrelease(pstream); avifileexit(); } 主要用到avistreamgetframe函数
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如果上帝给你人生最后三十天你会去干些什么
有对方银行卡号的话可以查到对方的住址之类的
韩国爱情片?
QQ2010登入出现0x00000001的错误号码,
龙腾世界那些位子可以摆摊
索爱t707的准确价格是多少
首居村地址在哪,我要去那里办事
身高不高的我能找到真爱吗?
32吨增加4分之1吨后是()吨?
滕州座长途汽车去苏州需要多少钱?
生了宝宝三个多月,与老公同房会怀孕吗
TP无线路由器300M的 可以穿透5堵墙吗 其信号
未来的动物有什么变化 特别是马哦
还有哪个是马桶魔王
凤山花园西二门地址在什么地方,想过去办事
推荐资讯
热血传奇以前领的40级帐号
送我套q秀吧 谢谢
求背考研单词软件
初中奥数,简单的
DNF转区COF会不会清零,师徒工会还能不能建立
1996年10月初二是阳历的什麽时候
为什么男人就是累啊?
QQ校友群必须群主才能申请吗?
仙剑四角色速度变慢了,怎么解决。。。
5岁孩子学创意绘画有用吗
犬夜叉啊有剧场版了啊?
名扬西路/龙盛路(路口)怎么去啊,有知道地址
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?