DXGI快速截圖錄屏技術

2021-09-08 20:03:08 字數 1291 閱讀 4592

很多地方都需要用到截圖/錄屏技術,比如桌面直播,桌面錄製等等。在微軟windows平台,有很多截圖的介面,不過大多數效能並不理想,windows8以後微軟引入了一套新的介面,叫「desktop duplication api」,應用程式,可以通過這套api訪問桌面資料。而由於desktop duplication api是通過microsoft directx graphics infrastructure (dxgi)來提供桌面影象的,速度非常快。由於是通過gpu,所以cpu佔用率很低,效能很高。

還有一點有意思的是,duplication api獲取到的桌面資料,不管顯示模式如何設定,都永遠是32位rgba資料,其實這樣方便的多了,不用考慮其他可能的情況,比如24位等。

綜合來看,各方面秒殺gdi截圖技術,易用性上也比mirrordriver技術好得多,是windows8以後平台的截圖技術首選。

首先,這套介面是整合在dirextx之中的,所以更大部分directx介面的使用方式基本一致,也就是通過d3d,各種queryinte***ce,各種enum,核心方法,是acquirenextframe。先簡單說下流程。

建立d3ddevice

通過一系列介面獲取路徑,獲取到idxgioutputduplication介面

呼叫acquirenextframe,獲取當前桌面資料,儲存在idxgiresource中

把資料從gpu對映到記憶體中

拷貝需要的資料到自己的buffer裡

其中,獲取到idxgioutputduplication介面,是通過如下路徑:

這裡把他跟傳統的使用gdi截圖技術,進行對比。程式只擷取桌面資料,然後把資料儲存到自己的記憶體buffer中,不做其他操作。cpu有點差,如果是好點的cpu,效能資料應該是更好看,不過做對比還是很明顯能看出來的。

我的筆記本比較老了,所以gdi最多只能跑到20幀了,不過可以看到,即使這種情況下,當不設定幀率,也就是無限迴圈截圖的情況下,dxgi的效能只能用可怕來形容。。。

anydesk截圖技術

anydesk針對不同的作業系統使用了不同的截圖技術 針對nt5系統使用ddraw截圖。針對nt6系統優先使用dxgi截圖,如果不支援dxgi則使用dx截圖。為什麼這樣做呢?首先directdraw覆蓋了全系統,但是dx確不一定是什麼版本了,在nt5上使用ddraw速度肯定是比gdi快的 如果win...

c 錄屏 FFmpeg錄屏 錄屏格式轉換

需要對軟體的客戶區進行錄屏,但是找了半天資料發現並不好整合到我的軟體當中,最後發現利用cmd命令呼叫ffmpeg.exe可以實現錄屏功能,實現錄屏以及錄屏格式轉換,相當有趣。ffmpeg有乙個專用於windows下螢幕錄製的裝置 gdigrab。gdigrab是基於gdi的抓屏裝置,可以抓取螢幕的特...

C 截圖工具開發技術

最近有乙個需要擷取當前螢幕,並儲存成bmp檔案的需求。整個需求,拆分成三步 1 擷取螢幕,獲得位圖資料。2 配合bmp檔案結構資訊,將資料整合。3 對整合後的資料做操作,如儲存在本地 通過網路傳送至伺服器等。截圖首先獲得螢幕的hdc,通過getdc 這個api,接著建立乙個相容hdc,即comhdc...