呼叫Windows API截圖要50ms一張圖,那麼那些錄屏軟體是如何做到60FPS的速度的呢?

時間 2021-05-06 18:21:59

1樓:九先生

雖然麼沒看過原理,不負責任瞎回答。但是我猜測是從視訊記憶體中讀出來,寫入記憶體,再通過程式展示給你結果,展示過程還要重新寫入視訊記憶體。這個過程需要50ms。

2樓:

WinXP/Win7的截圖技術不太清楚,印象裡用Mirror Driver是最快的。

Win8.1/Win10用DXGI效能最好,官方推薦C/C++編寫。

DXGI文件:

Desktop Duplication API文件:

2018.5.15補充

乙個DXGI+FFMPEG的錄屏專案:

3樓:qst hz

用gdi截圖也快不了多少的,很難達到60幀/s的捕獲速度。主流的方式一般是dx下鉤子捕獲後緩衝(OBS Studio,一般用來捕獲遊戲),桌面複製(Desktop Duplication,WIN8後才支援)。比較非主流的方式有rdp(嚴格的說不算截圖了,因為截到的不是螢幕畫面而是繪製用的資料),還有其他樓說的映象驅動也是乙個辦法,就是相容性可能有點問題,不支援WDDM的系統(也就是NT6以上)。

順便提一下,用D3D直接擷取前緩衝是不行的,速度和GDI一樣慢,因為在現代OS裡最終畫面都是直接在GPU上輸出的。擷取前緩衝相當於把GPU最終輸出的畫面又從視訊記憶體拷回記憶體了。這個速度是非常慢的,可以達到ms級的延遲。

OpenGL的glReadPixels也是同理。

如果要穩定保持60幀/s的速度,那麼就只能在視訊記憶體裡多留幾個畫面的備份,每次渲染當前幀是備份當前畫面並非同步地把一~兩幀前的畫面傳遞給記憶體,這樣只要保證你渲染當前幀的時候三幀前的畫面已經從視訊記憶體傳遞到記憶體就好了。(假設當前幀率是60fps,那麼只要保證從視訊記憶體to記憶體拷貝一張畫面在3/60秒以內完成就可以了) ——該方法來自OBS Studio

有沒有可以滾動截圖的截圖工具?

可以參考我的這個回答哦!好用的截圖工具有哪些?qing的回答 知乎 https www. Tooru 本回答下的兩款我都試了 picpick和fscapure。單純為滾動截圖 picpick完全失敗 很有可能是不會用 其他截圖流暢度也很一般 非得擷取單一活動視窗snipaste它不夠輕量不夠流暢不夠...

如何用ANSYS截圖?

黨小陽 截圖之前有兩步工作 首先,先把背景改成白色 FINISH PERP7 COLOR,DEFAULT RGB,INDEX,100,100,100,0 RGB,INDEX,80,80,80,13 RGB,INDEX,60,60,60,14 RGB,INDEX,0,0,0,15 REPLOT 其次,...

iOS 9截圖如何不截到Assistive touch?

EEBruce 個人手機情況 iPhone 6s IOS 9.3.2Assistant Touch只定義了Home鍵功能。截圖方法 同時按下電源鍵和實體Home鍵來截圖,然後先鬆開Home鍵,延遲一會兒會兒 可以自己感受下時間長短 再鬆開電源鍵。2016.08.27更新 或者先鬆開電源鍵,延遲一會兒...