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

= & Assign( )的差別

答題得分者是:taishyang
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-07 12:25:28 IP:211.76.xxx.xxx 未訂閱
如同主題 EX: TheBitmap=Image1->Picture->Bitmap; 跟 TempBitmap->Assign(TheBitmap); 這兩個語法有什麼不同阿? 希望各位高手能幫幫忙解答一下....感激不盡..
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-07 16:01:00 IP:140.135.xxx.xxx 未訂閱
Allanx您好:    效果是一樣的,只要型態一致即可,下面是從Help節錄出來的
Copies a new bitmap image to the bitmap object.    virtual void __fastcall Assign(Classes::TPersistent* Source);
Description Assign copies the bitmap image contained in Source to the bitmap object. Assign then calls the parent class's Assign. If the bitmap needs to be changed, the actual bitmap image is copied before the changes are made (copy on write). Note An object of one type can always be assigned to another object of the same type. Also, the Source can be of type TPicture if the Graphic property of the picture is a bitmap. 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-07 16:51:18 IP:211.76.xxx.xxx 未訂閱
何謂型態? 包含:Image的height..Width..還是...?    還有我現在做了一個Button是用來找邊界ㄉ功能.. 是想先將圖形按二值化的Button後,再按這個找邊界的Button 可是一直有問題.....    以下是書裡寫的code      Byte *ptr,*tptr,*uptr,*dptr;        int up,down,left,right,sum;        Graphics::TBitmap *TheBitmap,*TempBitmap;               TheBitmap=Image1->Picture->Bitmap;           // 產生一ㄍ臨時圖像以便作處理       TempBitmap=new Graphics::TBitmap();       TempBitmap->Assign(TheBitmap);          //執行濾波器       for(int y=0;yHeight;y ) { up=y-1; //up and down表"列"的數值 down=y 1; if(up<0) //表若Foucs處理第一列時,必須挑圖形ㄉ最後一列 up=TheBitmap1->Height-1; if(down==TheBitmap1->Height) down=0; ptr=(Byte*)TheBitmap1->ScanLine[y]; tptr=(Byte*)TempBitmap->ScanLine[y]; uptr=(Byte*)TempBitmap->ScanLine[up]; dptr=(Byte*)TempBitmap->ScanLine[down]; for(int x=0;xWidth;x ) { left=x-1; right=x 1; if(left<0) left=TheBitmap1->Width-1; if(right==TheBitmap1->Width) right=0; sum=(int)(uptr[x] tptr[left]-4*tptr[x] tptr[right] dpt[x]); //此為拉普拉斯法 if(sum<0) ptr[x]=0; else ptr[x]=255; } } ..................................................... Run是可以Run只是每次按此Button時,在sum=(int)(uptr[x] tptr[left]-4*tptr[x] tptr[right] dpt[x]);這行都會出現DeBug(反藍線)。一值都不知道問題出在哪?然後我找到一個Code是跟這有關ㄉ(見下),希望可以解釋一下.. int __fastcall TForm1::ExpendFilter(int i,int j)這行的元件如何點選呢? int __fastcall TForm1::ExpendFilter(int i,int j) { int Expend; int p[10]; p[1]=p1[i-1][j-1]; p[2]=p1[i][j-1]; p[3]=p1[i 1][j-1]; p[4]=p1[i-1][j]; p[5]=p1[i][j]; p[6]=p1[i 1][j]; p[7]=p1[i-1][j 1]; p[8]=p1[i][j 1]; p[9]=p1[i 1][j 1]; Expend=(p[1] p[2] p[3] p[4] p[6] p[7] p[8] p[9]); if (Expend>=255) return (Expend); else return 0; 希望板主能指點迷津....多謝板主ㄉ回應... 不好意思問題似乎有點多....呵呵
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-07 17:16:57 IP:140.135.xxx.xxx 未訂閱
Allanx您好: PO程式碼的方式請參考版規 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45789 謝謝您的配合 我指的型態是說< class="code"> TheBitmap=Image1->Picture->Bitmap; (TBitmap*)<============>(TBitmap*) TempBitmap->Assign(TheBitmap); (TBitmap*)<=========>(TBitmap*)
引言: 知道問題出在哪?然後我找到一個Code是跟這有關ㄉ(見下),希望可以解釋一下.. int __fastcall TForm1::ExpendFilter(int i,int j)這行的元件如何點選呢?
ExpendFilter(int i,int j),這不是元件,是一個屬於Form1的Method 找邊緣您可以參考小弟的拙作 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40159 當中的邊緣偵測 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-07 17:43:19 IP:211.76.xxx.xxx 未訂閱
不好意思..因為是新手還不太進入狀況 ExpendFilter(int i,int j),這不是元件,是一個屬於Form1的Method 那這個Method如何點選阿?我找ㄌ好久都找不到....是在Events裡嘛?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-07 17:47:19 IP:140.135.xxx.xxx 未訂閱
Allanx您好:
引言: ExpendFilter(int i,int j),這不是元件,是一個屬於Form1的Method 那這個Method如何點選阿?我找ㄌ好久都找不到....是在Events裡嘛?
如下圖所示 建議您將書上的前面幾章再看一下囉< > 順心< > ~我也是在學習的階段,回答的不好請您多多見諒與指教~
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-07 17:57:33 IP:211.76.xxx.xxx 未訂閱
這下糟糕ㄌ...我用ㄉ是5.0ㄉ... 難怪找不到...該怎辦ㄋㄟ?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-07 18:04:08 IP:140.135.xxx.xxx 未訂閱
Allanx您好:
引言: 這下糟糕ㄌ...我用ㄉ是5.0ㄉ... 難怪找不到...該怎辦ㄋㄟ
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28358 這裡有BCB5.0的版本(舊的)
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-07 18:39:25 IP:218.166.xxx.xxx 未訂閱
Allanx 你好: "Image1->Picture->Bitmap" 是一個 Graphics::TBitmap 的指標,所以TheBitmap必定也是一個 Graphics::TBitmap 的指標。這個語法就像是以下程式的結果:
int a = 10, b = 20;
int *ptr1, *ptr2, *ptr3;
ptr1 = &a;
ptr2 = &b;
ptr3 = ptr1; // 跟這行的效果一樣
所以當 *ptr3 = 30; 時,a的值也變成30。當改變TheBitmap,實際上就是改變Image1->Picture->Bitmap(因為是指標)。 若是 "TempBitmap->Assign(TheBitmap)",則相當於
*ptr2 = *ptr1; // 跟這行的效果一樣,把a的值拷貝到b
所以TempBitmap是TheBitmap的複本,就算改變TempBitmap,TheBitmap還是不會變。 說明的好混亂的感覺~~ 發表人 -
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-07 20:45:57 IP:211.76.xxx.xxx 未訂閱
板主:     雖然板主提供的程式裡有TForm1::Filter(int i,int j)的Method,可是我不知道在我ㄉ程式裡要如何打開這ㄍMethodㄟ?是我ㄉBCB的關係嘛?還是...? < > 感謝各位高手的指教...< >
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-07 20:54:28 IP:140.135.xxx.xxx 未訂閱
Allanx您好:
引言: 雖然板主提供的程式裡有TForm1::Filter(int i,int j)的Method,可是我不知道在我ㄉ程式裡要如何打開這ㄍMethodㄟ?是我ㄉBCB的關係嘛?還是...?
是您還不熟悉軟體(BCB)的操作還是其他原因呢? 您的問題已經和標題沒什麼關聯囉
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-03-07 21:31:36 IP:211.76.xxx.xxx 未訂閱
嗯...這是我第一次寫影像處理ㄉ程式... 所以都還不太熟悉說...    謝謝你的指教讓我學到很多東西...
系統時間:2024-04-28 19:39:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!