使用GDI與DfMirage進行屏幕截圖的比較

 屏幕截圖在一些辦公、IM、遠程登陸與控制、視頻等軟件中經常使用,通過屏幕抓拍完成屏幕遠程共享、保存成圖像文件或視頻文件。通過使用GDI截屏與DfMirage後,對兩種屏幕截圖方法做些比較和總結:

 

GDI截屏

 GDI(graphics device interface)是window提供的api函數,用於設備上下文繪製圖形。sourceforge上有個屏幕錄製開源程序,應該是叫Cam Studio,用的就是GDI截屏,可供參考。

使用步驟:

1、獲取屏幕句柄

WINAPI函數::GetDesktopWindow()

2、獲取屏幕DC

WINAPI函數:GetDC

3、通過BitBlt函數將屏幕圖像複製到DC中

4、通過GetDIBits獲取截圖的位圖數據

 

特點:簡單易用,開發方便,但cpu佔用率高、數據量大

 

DfMirage截屏

   開源項目TightVNC是應用DfMirage的一個例子,tightvnc-1.3.10支持DfMirage截屏,大家可以參考代碼學習,最新版的tightvnc好像不支持DfMirage。

DfMirage是Windows NT操作系統家族的的視頻驅動鏡像技術,視頻驅動鏡像技術廣泛採用於遠程桌面應用程序,如NetMeeting, PC Anywhere, VNC, Webex等等。

相對於GDI屏幕抓取,鏡像截屏是一個技術上很優越的方法,通過虛擬驅動,系統發往顯卡的命令也發給虛擬驅動,在虛擬驅動中模擬出當前系統的顯示內容。
DfMirage驅動程序將屏幕表面映射到的用戶的應用程序的虛擬內存空間,DfMirage跟蹤屏幕最小的更新區域和用戶軟件能直接檢索到這些區域,也就是說虛擬驅動和應用軟件共享屏幕內存。通常情況下,緩衝區的大小和格式完全對應的主屏幕表面的格式和大小。DfMirage能檢索到只發生數據改變的區域,同時應用程序也能讀取到整個屏幕緩衝區。可以使用DfMirage驅動程序解決需要高效率的檢測屏幕變化區域的應用。

 

使用步驟
1、安裝DfMirage驅動

2、應用程序通過ExtEscape()Windows API函數與DfMirage驅動通信

DfMirage定義了一些私有escape編碼。Escape函數代碼和輸入輸出結構體在DfMirage提供的display-esc.h頭文件裏面聲明(這是一個供驅動程序和應用程序之間共同使用的接口頭文件)

 

特點:效率高,節省CPU使用率

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章