我有類似這樣的一個問題:How to copy a CImage object? 我需要做的CImage對象的深副本。具體的問題是,我得到一個的CImage *從輔助線程通過PostMessage的,並希望將其複製到的CImage對象,它是不同類的屬性。深的CImage對象的副本,導致調試斷言失敗
目前,我有以下代碼:
LRESULT CMainFrame::TransApplied(UINT wParam,LONG lParam)
{
DEB("message recieved\n"); //this is debug message to output
CImage *obrazek=(CImage*)wParam;
int a;
CString t;
CImage tymczas;
obrazek->Save(_T("mesydz.jpg"));//checking if the image is valid
DEB("o1\n");
obrazek->GetDC();
PointerToViewClass->przetransformowany.Create(obrazek->GetWidth(),obrazek->GetHeight(),obrazek->GetBPP());
DEB("o2\n");
obrazek->BitBlt(PointerToViewClass->przetransformowany.GetDC(),0,0,SRCCOPY);
// obrazek->ReleaseDC();
DEB("o8\n");
PointerToViewClass->przetransformowany.ReleaseDC();
DEB("o6\n");
DEB("o7\n");
obrazek->ReleaseDC();
//delete obrazek;
return 0;
}
我懷疑有什麼問題obrazek->的GetDC()和obrazek-> ReleaseDC()。我沒有錯誤,當我有obrazek->的GetDC()(但在其他方面有調試斷言上obrazek->的BitBlt(...)失敗),但我無法釋放obrazek的DC和/或刪除obrazek對象,我想這樣做,因爲我有內存泄漏,如果我不這樣做。
所以一般有件事我不知道複製的對象。
編輯:
其他線程處理的CImage以下列方式:
CImage wyniczek;
CImage *doprzeslania;
objekt->ApplyTransform(macierz,&wyniczek);//object is an object of a class declared in dll
doprzeslania=new CImage(wyniczek);
PostMessage(data->parent,MY_WM_MESSAGE4,(WPARAM)doprzeslania,(LPARAM)3);
delete objekt;
FreeLibrary(hDLL);
delete data;//deleting an object with settings for the thread
return 0;
,另外,什麼是在DLL與圖像發生的事情:
void IProcess::ApplyTransform(std::vector<double> matrix,CImage *rezult)
{
//
//some image processing here
//
output.Create(dest.cols,dest.rows,24);
BITMAPINFO bmi; //it is initialized properly, had erased it for clarity
StretchDIBits(output.GetDC(),0,0,dest.cols,dest.rows,0,0,dest.cols,dest.rows,temp.data,&bmi,DIB_RGB_COLORS,SRCCOPY); //copy from opencv Mat object to CImage
rezult->Create(output.GetWidth(),output.GetHeight(),24);
output.BitBlt(rezult->GetDC(),0,0,SRCCOPY); //copy to CImage *rezult
output.ReleaseDC();
rezult->ReleaseDC();
}
你真的確定,當您收到消息的對象仍然存在。其他線程如何釋放此CImage? – xMRi 2014-10-09 08:50:01
是的,我敢肯定 - 在被的CImage成功地保存到磁盤(obrazek->保存(_T(「mesydz.jpg」));),似乎是完全有效的圖像。關於其他線程的 我會修改問題並添加更多代碼。 – user3621602 2014-10-09 16:49:24
或者可能存在另一種在類和線程之間交換圖像的方法? – user3621602 2014-10-10 18:39:10