不少地方都須要用到截屏/錄屏技術,好比桌面直播,桌面錄製等等。在微軟Windows平臺,有不少截屏的接口,不過大多數性能並不理想,Windows8之後微軟引入了一套新的接口,叫「Desktop Duplication API」,應用程序,能夠經過這套API訪問桌面數據。而因爲Desktop Duplication API是經過Microsoft DirectX Graphics Infrastructure (DXGI)來提供桌面圖像的,速度很是快。因爲是經過GPU,因此cpu佔用率很低,性能很高。
性能
還有一點有意思的是,Duplication API獲取到的桌面數據,無論顯示模式如何設置,都永遠是32位RGBA數據,其實這樣方便的多了,不用考慮其餘可能的狀況,好比24位等。測試
綜合來看,各方面秒殺GDI截屏技術,易用性上也比MirrorDriver技術好得多,是Windows8之後平臺的截屏技術首選。ui
首先,這套接口是集成在DirextX之中的,因此更大部分DirectX接口的使用方式基本一致,也就是經過D3D,各類QueryInterface,各類Enum,核心方法,是AcquireNextFrame。先簡單說下流程。線程
其中,獲取到IDXGIOutputDuplication接口,是經過以下路徑:
IDXGIDevice --> IDXGIAdapter --> IDXGIOutput --> IDXGIOutput1 --> IDXGIOutputDuplication3d
這裏把他跟傳統的使用GDI截屏技術,進行對比。程序只截取桌面數據,而後把數據保存到本身的內存buffer中,不作其餘操做。CPU有點差,若是是好點的cpu,性能數據應該是更好看,不過作對比仍是很明顯能看出來的。blog
個人筆記本比較老了,因此GDI最多隻能跑到20幀了,不過能夠看到,即便這種狀況下,當不設置幀率,也就是無限循環截屏的狀況下,DXGI的性能只能用可怕來形容。。。接口
注意:上面最後表裏的DXGI幀率當時應該是統計錯誤,實際到達不了這麼高,不少是無效採集,可是有效採集的幀率也是很是高的,具體數據等我有時間了再作統計。(2019-03-22)內存
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++直播
haibindev.cnblogs.com,合做請聯繫QQ。(轉載請註明做者和出處~)io
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++