指標的傳遞問題 |
尚未結案
|
foluswen
一般會員 發表:1 回覆:0 積分:0 註冊:2008-09-28 發送簡訊給我 |
各位高手大家好,小弟目前在撰寫Bitmap to Iplimage的function發生了一點小問題,描述如下:
呼叫BmpToIpl() function時,傳入srcImg的指標,function運算完後srcImg的指標內容卻是NULL 在function內指標確實有內容,為何會這樣呢?.....請各位高手解惑,謝謝!........ [code cpp] void __fastcall getHist(Graphics::TBitmap *bitMap,Graphics::TBitmap *histMap) { IplImage* srcImg=0; BmpToIpl(bitMap,srcImg); . . . } void __fastcall BmpToIpl (Graphics::TBitmap *src,IplImage *dest) { BITMAP bmp; GetObject(src->Handle,sizeof(BITMAP),&bmp); int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8 ; int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U; dest = cvCreateImageHeader(cvSize(bmp.bmWidth,bmp.bmHeight),depth,nChannels); dest->imageData = (char*)malloc(bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char)); memcpy(dest->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels); delete &bmp; } [/code] |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
IplImage* srcImg=0;
IplImage** tmp=&srcImg; BmpToIpl(bitMap,tmp); void __fastcall BmpToIpl (Graphics::TBitmap *src,IplImage **dest) { BITMAP bmp; GetObject(src->Handle,sizeof(BITMAP),&bmp); int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8 ; int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U; *dest = cvCreateImageHeader(cvSize(bmp.bmWidth,bmp.bmHeight),depth,nChannels); *dest->imageData = (char*)malloc(bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char)); memcpy(*dest->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels); delete &bmp; }
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-12-16 11:39:47, 註解 無‧
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
Hi,
你必須使用雙重指標來解決這個問題。 因為在BmpToIpl()中,傳入的IplImage *dest 被cvCreateImageHeader(cvSize(bmp.bmWidth,bmp.bmHeight),depth,nChannels); 改寫了 在BmpToIpl()外面的IplImage* srcImg還是指向NULL 如果搞不清楚為什麼 請比較 IplImage* srcImg = NULL; BmpToIpl(..., srcImg); 與 IplImage* srcImg = cvCreateImageHeader(...); (或是更推薦用 IplImage* srcImg = cvCreateImage(...);) BmpToIpl(..., srcImg); 執行前後srcImg 不同的地方 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |