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

有關 DC 的釋放問題

答題得分者是:wameng
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-12 14:41:12 IP:219.87.xxx.xxx 訂閱
我最近在寫一個 screen capture 的程式, 有參考 AVI_UTILS 的 code, 它是以 GetDC(0) 來取得螢幕的 DC, 我發現程式中每次抓了一個 frame 之後就要 releaseDC 一次, 為了榨出程式的效能, 我有試過在程式起始 GetDC, 然後在結束時再 release, 看起來好像也沒什麼問題, 請問各位大大, 是否真的要每抓一個畫面就要釋放 DC, 如果不釋放的話, 我要注意什麼事, 另外我在 AVI_UTILS 中的 code 看到他還另外用 CreateCompatibleDC 來處理, 不知有什麼特別的功用, 煩請各位幫我解答一下. 謝謝.
------
Jesse Chan
編輯記錄
jessechan 重新編輯於 2007-06-12 17:24:35, 註解 無‧
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-12 21:54:48 IP:219.86.xxx.xxx 訂閱
是沒有必要這麼煩惱地。

GetDC 與 ReleaseDC 當然是有借有還再借不難。
按照字面解釋 GetDC 取得 HWND 所指定的最後一次狀態的繪圖 Device。
我的想法上應該是取得對應繪圖區塊(Windows 為了避免直接操作),最後在藉由ReleaseDC將其資源釋放。

當然沒有ReleaseDC 將造成GDI繪圖資源無放釋放的嚴重後果。尤其在Win9x GDI資源是有限的情況下。
將有可能造成系統崩潰。

CreateCompatibleDC 目的建造一個虛擬的繪圖Device。
補:或者建立 與目前設備或指定DC相容的設備。
SomeTime 會建立一個臨時的DC以供做一些繪圖處理。
編輯記錄
wameng 重新編輯於 2007-06-12 22:09:19, 註解 無‧
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-12 22:49:49 IP:61.31.xxx.xxx 訂閱

===================引 用 wameng 文 章===================
是沒有必要這麼煩惱地。

GetDC 與 ReleaseDC 當然是有借有還再借不難。
按照字面解釋 GetDC 取得 HWND 所指定的最後一次狀態的繪圖 Device。
我的想法上應該是取得對應繪圖區塊(Windows 為了避免直接操作),最後在藉由ReleaseDC將其資源釋放。

當然沒有ReleaseDC 將造成GDI繪圖資源無放釋放的嚴重後果。尤其在Win9x GDI資源是有限的情況下。
將有可能造成系統崩潰。

CreateCompatibleDC 目的建造一個虛擬的繪圖Device。
補:或者建立 與目前設備或指定DC相容的設備。
SomeTime 會建立一個臨時的DC以供做一些繪圖處理。
======================================================================================
感謝回覆, 我想再問深入一些, 我在程式的最後再 release 會不會造成什麼不良影響(程式會執行很長一段時間), 會不會造成系統資源因為 DC 尚未釋放而越佔越多, 因為我一秒鐘要 get release 四次, 如果不用這麼做, 是可以省下不少系統操作時間, 另外再請教一下, CompatibleDC 的必要性, 我可以直接使用 GetDC(0) 嗎. 多謝.
------
Jesse Chan
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-13 11:02:40 IP:61.222.xxx.xxx 訂閱
>我在程式的最後再 release 會不會造成什麼不良影響
可以但是不可以重複GetDC 後,最後只ReleaseDC 一個。

>CompatibleDC & GetDC
兩者是不同的。前者是建立一個參照DC獨立虛擬出來的。
而後者是取目前DC ,這將會直接做用於 目前的HWND。

總不可能干涉別人的畫面,弄了一團亂。
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-13 14:19:56 IP:60.250.xxx.xxx 訂閱
謝謝, 我的程式是畫面抓取, 所以應該不會有這樣的問題.
------
Jesse Chan
系統時間:2024-05-02 17:09:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!