我用VFW进行摄像头录像, 然后在回调函数中得到单帧图像,格式是YUV2,可是图像太大了有600多KB。
请问如何使用ICCompress之类的函数进行压缩解压缩呢?
网上搜了好久,看到的东西都很凌乱。求高手给个压缩解压缩的例子。
请问如何使用ICCompress之类的函数进行压缩解压缩呢?
网上搜了好久,看到的东西都很凌乱。求高手给个压缩解压缩的例子。
解决方案 »
- 不显示删除回复显示所有回复显示星级回复显示得分回复 用vc写GPS串口程序,但是数据读不出来,求高手帮忙
- 鼠标话矩形的一点问题
- 给大家出个面试过的数据结构题
- 有关RS232第三方类SerialPort的问题
- 想问一个关于GDI+的问题!~~
- 怎么获得一个进程下边的所有的子进程啊?
- 在对话框中的报表打印问题
- 啊!天哪!CreateToolhelp32Snapshot能产生内存泄漏?
- 用WSAAsyncSelect实现多播,问题!!!!!
- 那里有com本质论(中文版的,潘或者侯捷的都可以)下载么?
- cab包签名问题,为什么让选私钥的时候总是不能选择呢,要么是空要么不能选择
- 为啥vs2008添加对话框类没反映
先用 capSetCallbackOnFrame 注册一个帧回调函数
然后用 capGrabFrame或者capGrabFrame截取单帧图像,之后在回调函数的lpVHdr->lpData中就保存着单帧图像数据,注意是YUV2类型的。
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;
}