当前位置: 代码迷 >> VC >> 封存视频图片出错,求帮助
  详细解决方案

封存视频图片出错,求帮助

热度:194   发布时间:2016-05-05 00:04:30.0
保存视频图片出错,求帮助

IplImage   *saveImage=NULL;
cvCopy(saveImage,m_pImageShow);
CString m_path;
UpdateData(TRUE);
//char BASED_CODE  szFilter[] = _T("JPEG(*.jpeg)|*.jpeg|PNG(*.png)|*.png|BMP(*.bmp)|*.bmp");
CFileDialog hFileDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT
,_T("JPEG(*.jpeg)|*.jpeg|PNG(*.png)|*.png|BMP(*.bmp)|*.bmp||"));
hFileDlg.m_ofn.nFilterIndex=1;
hFileDlg.m_ofn.hwndOwner=m_hWnd;
//hFileDlg.m_ofn.lStructSize=sizeof(SAVEFILENAME);
hFileDlg.m_ofn.lpstrTitle=TEXT("Save Image...\0");
hFileDlg.m_ofn.nMaxFile=MAX_PATH;
if(hFileDlg.DoModal() == IDOK)
{
m_path = hFileDlg.GetPathName();
cvSaveImage(m_path,saveImage);
}
UpdateData(FALSE);
cvReleaseImage(&saveImage);

m_pImageShow是显存的数据,显示到图像上.

------解决方案--------------------
你那个CVCOPY函数使用的时候,要先自己根据原来的图片的大小,开一样大小的内存出来才行,否则copy过来的数据不完整。
引用:
cvCopy的原型是:
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
在使用这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。cvCopy会把src中的数据复制到dst的内存中。

cvCloneImage的原型是:
IplImage* cvCloneImage( const IplImage* image );
在使用函数之前,不用开辟内存。该函数会自己开一段内存,然后复制好image里面的数据,然后把这段内存中的数据返回给你。

clone是把所有的都复制过来,也就是说不论你是否设置Roi,Coi等影响copy的参数,clone都会原封不动的克隆过来。
copy就不一样,只会复制ROI区域等。用clone复制之后,源图像在内存中消失后,复制的图像也变了,而用copy复制,源图像消失后,复制的图像不变

------解决方案--------------------
cvCopy(saveImage,m_pImageShow);//确定saveImage 是指针参数,且只要往cvCopy 传递一个NULL,就可以获得数据?
  相关解决方案