对话框处理图片时建立的工程名为parasite,类中定义的变量及成员函数如下:
class CParasiteDlg : public CDialog
{
// Construction
public:
int ColorTansformation(IplImage* img,IplImage* dst);//带参数的图片处理函数
void ShowImage(IplImage* img, UINT ID);//显示图像的函数
IplImage* TheImage;//全局的图像指针
CParasiteDlg(CWnd* pParent = NULL);
protected:
afx_msg LONG OnThreadShowImage (WPARAM wParam, LPARAM lParam);//消息
HICON m_hIcon;
protected://这里定义了struct中的几个变量
ImageData ImgData;
CString    * m_print_screen;
HANDLE     * hThread;
CCriticalSection *section;
afx_msg LONG OnThreadShowImage (WPARAM wParam, LPARAM lParam);
HICON m_hIcon;
}
在文件 parasiteDlg.h 中定义了一个struct,也就是在CParasiteDlg的外部定义:
struct ImageData
{
CString    * m_print_screen;//用于编辑框的输出
HANDLE     * hThread;//这个无关紧要
CCriticalSection *Section;
HWND hWnd;
};//线程测试
初始化
BOOL CParasiteDlg::OnInitDialog()
{
CDialog::OnInitDialog();
         .....
        this->section=new CCriticalSection; ImgData.hWnd=CWnd::m_hWnd;
ImgData.hThread=hThread;
ImgData.m_print_screen=&m_print;
ImgData.Section=this->section;
}线程函数的实现
UINT ThreadFunc( LPVOID pParam )
{
ImageData *ptp=(ImageData*)pParam;
ptp->Section->Lock();
CString *csprint=ptp->m_print_screen; *csprint+="开始进行灰度变换......\r\n\r\n";
SetDlgItemText(ptp->hWnd,IDC_MILLISECOND,csprint->GetBuffer(0));
Sleep(1000); *csprint+="灰度变换开始,请等待......\r\n\r\n";
SetDlgItemText(ptp->hWnd,IDC_MILLISECOND,csprint->GetBuffer(0));
Sleep(50);
CParasiteDlg* pImg=(CParasiteDlg*)pParam;
IplImage* gray=cvCreateImage(cvGetSize(pImg->TheImage),IPL_DEPTH_8U,1);
pImg->ColorTansformation(pImg->TheImage,gray);
::PostMessage(pImg->GetSafeHwnd(),WM_USER_THREAD_SHOWIMAGE,(WPARAM)pImg->TheImage,NULL);

cvReleaseImage(&gray);
return 0;
return 0;

}LONG CParasiteDlg::OnThreadShowImage(WPARAM wParam, LPARAM lParam)
{
IplImage* grayImage=(IplImage*)wParam;
ShowImage(grayImage,IDC_ShowdstImage);
return 0;

}
pImg->ColorTansformation(pImg->TheImage,gray);是自己定义的一个用来处理图片的函数
结果是编译成功,运行出现“0x004300ca”指令引用的“0x00000001”内存。该内存不能为“read”.的提示,另外调试运行的时候在IplImage* gray=cvCreateImage(cvGetSize(pImg->TheImage),IPL_DEPTH_8U,1);出现Unhandled exception in parasite.exe(cxcore100.Dll):0xC0000005:Access Violation.好像是说pImg没有分配有内存,这种情况的使用线程,怎么在线程里调用其他类的成员及成员函数??也就是在UINT ThreadFunc( LPVOID pParam )中调用CParasiteDlg的int ColorTansformation(IplImage* img,IplImage* dst);//带参数的图片处理函数和IplImage* TheImage;//全局的图像指针??请高手指点。该怎样给代码中的pImg分配指针??
能帮解决的,给全分!!!!!