想請問程式執行十分慢...可能的問題?? |
尚未結案
|
vinbaby
一般會員 發表:10 回覆:5 積分:3 註冊:2005-07-13 發送簡訊給我 |
我現在正在撰寫一個簡單的圖型配對的程式~~程式已經寫好了~~
不過發現ㄌㄧ些問題~~想麻煩厲害的大大~~教教我~~
為什麼它執行的很慢阿~~~配對會找到不過要花約30秒ㄟ~~以下我大約說明一下我程式的過程!! 我有一張大的影像A~~和一張小的影像B~~~而B是從A中切割出來的~~
所以一定會配對成功~~不過就是執行的很慢~~~我不太清楚為什麼??
以下我附上我所寫的程式碼~~~
//---------------------------------------------- #include麻煩可以有大大幫我解答一下~~~>< 以下我附上我的執行介面~~!! |
pony0385
一般會員 發表:1 回覆:1 積分:0 註冊:2005-01-23 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
vinbaby 您好: 有個耍賴的方法可以增進比對的速度,提供您參考一下!
那就是:先對左上角那一點,如果一樣,再進行區塊的比對!
程式增加的部分,以紅色表示:
void __fastcall TForm1::Button1Click(TObject *Sender) { ..... for(i=0; iRichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2005/09/03 10:35:55 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
vinbaby 妳好: 妳這個比對動作是逐點比對,所以會慢是正常的,妳看看程式內用了幾層迴圈就知道了,當然啦~程式還是可以設法做些處理,讓它稍微快一些,我剛才玩了一下,將妳設定的 img1 & img2 由 unsigned char 陣列改成使用 TBitmap,這樣子比較靈活一些,同時也可以用到 ScanLine,讓處理處度能稍快一些,修改的程式碼如下:
void __fastcall TForm1::Button1Click(TObject *Sender) { // 下列這兩行是拿來計算執行時間之用的,正式使用時可以刪除掉 DWORD StartTime, EndTime; StartTime = GetTickCount(); Screen->Cursor = crHourGlass; // 滑鼠指標換成沙漏圖案,表示在處理中 bool flag = false; int i, j, x, y, sum; // 改用 TBitmap 來代替原先的 unsigned char 陣列 Graphics::TBitmap *img1 = new Graphics::TBitmap(); Graphics::TBitmap *img2 = new Graphics::TBitmap(); img1->Assign(Image1->Picture->Bitmap); img2->Assign(Image2->Picture->Bitmap); TRGBTriple *ptr1, *ptr2; // 使用 TRGBTriple 以提高程式碼的易讀性 for (i=0; i或許還有其它更快速的方式或技巧,但是目前我僅玩到這邊,妳先參考一下吧。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/09/03 01:52:32 |
vinbaby
一般會員 發表:10 回覆:5 積分:3 註冊:2005-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |