本帖最后由 AfxVisualC 于 2012-12-05 10:11:27 编辑

解决方案 »

  1.   

      为什么这个ICCompress()的 LPBITMAPINFOHEADER类型的参数,在Parameters 的说明里却是指向一个BITMAPINFO结构体?ICOpen成功的情况下,这个函数出错会是神马原因?
      

  2.   


    msdn 里边矛盾,到底应该是哪个?
      

  3.   

    下载次数这么多,就是没人回复! 如果牛人都不愿下整个工程放编译器上的话,那我拣出最关键的一部分来贴出来。补充一下,资源里是没修改过的,原版,也就是连未压缩的avi都生成不了的。 //打开压缩管理器
    hIC=ICOpen(icInfo.fccType,icInfo.fccHandler,ICMODE_COMPRESS); 
    ICCompressGetFormat(hIC,&InHeader,&OutHeader); memset(&NewStreamInfo,0,sizeof(NewStreamInfo));
    NewStreamInfo.fccType=streamtypeVIDEO;
    NewStreamInfo.fccHandler=mmioFOURCC('M', 'S', 'V', 'C');
    NewStreamInfo.dwScale=1;
    NewStreamInfo.dwRate=25;
    NewStreamInfo.dwSuggestedBufferSize=OutHeader.biSizeImage;
    SetRect(&NewStreamInfo.rcFrame,0,0,OutHeader.biWidth,OutHeader.biHeight); if(ICCompressQuery(hIC,&InHeader,&OutHeader)==ICERR_OK)
    {
    ICCompressBegin(hIC,(BITMAPINFO*)&InHeader,(BITMAPINFO*)&OutHeader);
    } AVIFileCreateStream(pNewFile,&pNewStream,&NewStreamInfo);
    AVIStreamSetFormat(pNewStream,0,&OutHeader,sizeof(OutHeader)); for (int index=StartFrame; index<FrameNum; index++)
    {
    long num = sizeof(InHeader);
    AVIStreamReadFormat(pOldStream,index,&OutHeader,&num); BYTE* pDIB = (BYTE*) AVIStreamGetFrame(pFrame, index);
    BYTE* pData=pDIB+sizeof(BITMAPINFOHEADER);

    DWORD dwCkID;
    DWORD dwCompFlags;
    DWORD dwQuality=100;
    if(ICCompress(hIC,ICCOMPRESS_KEYFRAME,&OutHeader,lpOutData,
    &InHeader,pData,&dwCkID,&dwCompFlags,index,0,dwQuality,
    NULL,NULL)==ICERR_OK)
    {
    AVIStreamSetFormat(pNewStream,index,&OutHeader,sizeof(OutHeader));
    AVIStreamWrite(pNewStream,index,1,(LPBYTE)lpOutData,
    OutHeader.biSizeImage,AVIIF_KEYFRAME,NULL,NULL);

    }