線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1656
推到 Plurk!
推到 Facebook!

指標的傳遞問題

尚未結案
foluswen
一般會員


發表:1
回覆:0
積分:0
註冊:2008-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-13 09:15:42 IP:140.115.xxx.xxx 訂閱
各位高手大家好,小弟目前在撰寫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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-13 15:47:06 IP:122.120.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-13 16:30:32 IP:218.166.xxx.xxx 訂閱
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 不同的地方
系統時間:2024-04-23 21:28:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!