hco168 发表于 2012-6-3 16:10:42

AVI视频碎片恢复工具 企业版



企业版支持碎片

个人版不支持碎片




avi碎片提取原来 可以参照结构 和bmp可以互转 大家可以到网上找找相关源码 很多

void   CAVI1Dlg::OnButtonOpen()   
{
AVIFileInit(); //初始化AVI
PAVIFILE   avi; //声明AVI文件句柄

int   res   =   AVIFileOpen(&avi, "avi.avi ",OF_READ,NULL); //打开AVI文件并判断
if(res   !=   AVIERR_OK)
{
AfxMessageBox( "error   #1 ");
if(avi   !=   NULL)
AVIFileRelease(avi);
return;
}

PAVISTREAM   pStream; //声明AVI流
res   =   AVIFileGetStream(avi,&pStream,streamtypeVIDEO,0); //打开AVI流并判断
if(res   !=   AVIERR_OK)
{
AfxMessageBox( "error   #2 ");
if(pStream   !=   NULL)
AVIStreamRelease(pStream);
AVIFileExit();
return;
}

int   iNumFrames; //声明AVI总共帧数
int   iFirstFrames; //声明AVI第一帧

iFirstFrames   =   AVIStreamStart(pStream); //第一帧付值并判断
if(iFirstFrames   ==   -1)
{
AfxMessageBox( "error   #3 ");
if(pStream   !=   NULL)
AVIStreamRelease(pStream);
AVIFileExit();
return;

}

iNumFrames   =   AVIStreamLength(pStream); //总帧数付值并判断
if(iNumFrames   ==   -1)
{
AfxMessageBox( "error   #4 ");
if(pStream   !=   NULL)
AVIStreamRelease(pStream);
AVIFileExit();
return;
}

BITMAPINFOHEADER   bih; //声明BMP信息头
ZeroMemory(&bih,sizeof(BITMAPINFOHEADER)); //开内存付值为0

//写入信息头
bih.biBitCount   =   24;
bih.biClrImportant   =   0;
bih.biClrUsed   =   0;
bih.biCompression   =   BI_RGB;
bih.biPlanes   =   1;
bih.biSize   =   40;
bih.biXPelsPerMeter   =   0;
bih.biYPelsPerMeter   =   0;
bih.biSizeImage   =   (((bih.biWidth   *   3)+3)&0xFFFC)*bih.biHeight;

PGETFRAME   pFrame; //声明AVI帧
pFrame   =   AVIStreamGetFrameOpen(pStream,NULL); //打开AVI帧付值

int   index   =   0;
for(int   i   =   iFirstFrames;i <iNumFrames;i++) //循环,取出每一帧,写入每个BMP
{
index   =i   -   iFirstFrames;
BYTE*   pDIB   =   (BYTE*)AVIStreamGetFrame(pFrame,index); //取出每一帧


RtlMoveMemory(&bih.biSize,pDIB,sizeof(BITMAPINFOHEADER));

BYTE*   Bits   =   new   BYTE; //小东西藏在这
RtlMoveMemory(Bits,pDIB   +   sizeof(BITMAPINFOHEADER),bih.biSizeImage);
BYTE   memBitmapInfo;
RtlMoveMemory(memBitmapInfo,&bih,sizeof(bih));

BITMAPFILEHEADER   bfh; //声明BMP文件头,并写入
bfh.bfType   =   19778;
bfh.bfSize   =   55   +   bih.biSizeImage;
bfh.bfReserved1   =   0;
bfh.bfReserved2   =   0;
bfh.bfOffBits   =   sizeof(BITMAPINFOHEADER)   +   sizeof(BITMAPFILEHEADER);

CString   FileName; //建立文件
FileName.Format( "%d.bmp ",index);
FILE*   fp   =   fopen(FileName, "wb ");
if(fp   !=   NULL)
{
fwrite(&bfh,sizeof(bfh),1,fp); //写入文件头
fwrite(&memBitmapInfo,sizeof(memBitmapInfo),1,fp); //写入信息头
fwrite(Bits,bih.biSizeImage,1,fp); //写入每一帧
}
else
{
AfxMessageBox( "error   #5 ");
}

delete[]   Bits; //删掉小东西
}
AVIStreamGetFrameClose(pFrame); //关闭AVI帧付值,必须与打开对应
if(pStream   !=   NULL) //善后
AVIStreamRelease(pStream);
AVIFileExit();
}

mgq 发表于 2012-6-3 16:57:25

好工具

wufanb 发表于 2012-6-3 17:39:57

非常实用的工具,下了!

330wang 发表于 2012-6-3 19:36:48

谢谢谢谢谢谢

kjkjdn 发表于 2012-6-3 21:25:19

学习   学习再学习。

zhaolim 发表于 2012-6-3 21:36:00

谢谢,免费版的吗?

林信科技 发表于 2012-6-3 22:08:30

看看实用吗。。

mahuafeng 发表于 2012-6-3 22:11:12

谢谢谢谢谢谢
本文来自: 中国硬盘基地技术论坛 详细文章参考:http://bbs.intohard.com/thread-114122-1-1.html

wfzxb 发表于 2012-6-3 22:28:35

谢谢,支持了。。。

aoegery 发表于 2012-6-4 00:46:52

好工具!!!!!!!!!!!!!!!!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: AVI视频碎片恢复工具 企业版