重覆讀取圖片至bitmap物件,會造成什麼問題嗎? |
答題得分者是:taishyang
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
我宣告全域的一個bitmap物件:bmp,主要是為開啟.bmp檔而設。
第一次我用bmp->LoadFromFile()開啟一張256X256的圖處理,
處理完之後,並沒有做任何釋放記憶體的動作,我再load一張
512X512大小的做處理,此時bmp的記憶體至少變成四倍,程式
正常執行,沒有出現錯誤。所以我有個疑慮,這樣使用不會造
成記憶體錯誤嗎?
Graphics::TBitmap *bmp = new Graphics::TBitmap(); //全域變數 Button1Click { Bmp->LoadFromFile(OpenPictureDialog1->FileName); Image1->Width = Bmp->Width; Image1->Height = Bmp->Height; Image1->Picture->Bitmap = Bmp; } |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: JerryKuo您好: 假如您一直做讀新檔的動作(按按鈕),我想應該會造成記憶體不足吧 若您想重複使用Bmp的話可以加上這一行試試看沒有加ReleaseHandle,我做了連續開檔測試,按了數十次,都不會出現錯誤。 所以加了ReleaseHandle(),很難測出是否有用。 我想問"bitmap物件是否有類似freememory的指令",把記憶體清除,但bitmap物 件還在,因為是當作全域的變數,所以bitmap必須要留著,不能delete掉,delete 掉不就不能再使用囉。Bmp->ReleaseHandle();使用完後再加上delete Bmp; |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
JerryKuo您好:
引言:bitmap物件是否有類似freememory的指令",把記憶體清除,但bitmap物件還在,因為是當作全域的變數,所以bitmap必須要留著,不能delete掉,delete掉不就不能再使用囉。您要的功能應該就是 Bmp->ReleaseHandle();您可以參考下面的連結 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32646 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
你好: 我去查了一下releasehandle()的用法,順便也找到
Dormant(); // Free up GDI resources
FreeImage(); // Free up Memory
這兩個指令,我現在是三個一起用,能盡量釋放就盡量釋放 老實說,加了這些指令,還是看不出什麼效果和他真正的功能.
因為我把這三行加在開檔之後,如果他真的release掉記憶體
照理說,開檔後的bitmap,已經什麼都沒了,沒有任何像素,也讀不到
但是他還是能做影像處理,只是處理完的圖是一張白色的圖,
什麼都沒有。真是奇怪。 物件導向還真難... 謝謝囉版主.. 發表人 - jerrykuo 於 2003/07/14 15:20:21
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |