我用VFW进行摄像头录像, 然后在回调函数中得到单帧图像,格式是YUV2,可是图像太大了有600多KB。
请问如何使用ICCompress之类的函数进行压缩解压缩呢?
网上搜了好久,看到的东西都很凌乱。求高手给个压缩解压缩的例子。

解决方案 »

  1.   

    把邮箱给我,我给你个自己写的代码,这个代码里的ICCompress也是在回调函数里应用的,可以参考,作为交换,你能不能把你的回调函数获取单帧图像的代码给我啊?呵呵 [email protected] 我的邮箱
      

  2.   

    录取单帧很简单,
    先用 capSetCallbackOnFrame 注册一个帧回调函数
    然后用 capGrabFrame或者capGrabFrame截取单帧图像,之后在回调函数的lpVHdr->lpData中就保存着单帧图像数据,注意是YUV2类型的。
      

  3.   

    我把我的这段代码给你看看吧,看看对你有没有用,我是用这个回调函数完成视频录制的压缩
    LRESULT CALLBACK CVideoDlg:: Encodecallback(HWND hWnd,LPVIDEOHDR lpVHdr)
    {
    CVideoDlg* pDlg=(CVideoDlg*)AfxGetMainWnd();
    if ((pDlg->m_captured)&&(lpVHdr->dwFlags&VHDR_DONE))
    {
    char* buffer=new char[lpVHdr->dwBytesUsed+1]; memset(buffer,0,lpVHdr->dwBytesUsed+1);
    DWORD dwCkID;
    DWORD dwCompFlags;
    DWORD dwQuality=100;
    if (ICCompress(pDlg->m_com.hic,0,&pDlg->m_outinfo.bmiHeader,buffer,
    &pDlg->m_ininfo.bmiHeader,(unsigned char*)lpVHdr->lpData,
    &dwCkID,&dwCompFlags,pDlg->m_frame++,0,dwQuality,NULL,NULL)==ICERR_OK)
    //压缩一副单帧视频图像,并设置一些压缩的参数
    {
    AVIStreamSetFormat(pDlg->ps,pDlg->m_frame,&pDlg->m_outinfo,sizeof(pDlg->m_outinfo));
    AVIStreamWrite(pDlg->ps,pDlg->m_frame,1,(LPBYTE) buffer,
    pDlg->m_outinfo.bmiHeader.biSizeImage,AVIIF_KEYFRAME,NULL,NULL);
    }
    delete[]buffer;
    }
    return 1;
    }
      

  4.   

    把你代码发给我吧 十分万分的感谢。[email protected]