簡體   English   中英

如何訪問監視器圖像數據?

[英]How can I access to the monitor image data?

1.我遇到的問題

您好,我目前正在使用 Electron.js 制作桌面應用程序。 同時,我需要截屏(包括鼠標光標)的功能,但這對我來說是個問題,因為我不知道該怎么做。

我認為我無法解決這個問題的原因是我對操作系統一無所知。 我認為“截取屏幕截圖”的意思是“將圖像數據顯示在計算機顯示器上”,但我如何訪問它?

2. 我嘗試過或考慮過的

起初我嘗試Electron.BrowserWindow.capturePage()但它的結果不符合我的要求。 這是因為兩個原因:1)我的應用程序有一個透明的背景,如果我截屏,任何透明區域都會變成黑色。 2)鼠標cursor沒有被一起捕獲。

同時,我知道一些 API 的存在,例如 Screen Capture API 和 Media Capture and Streams API(在 web 瀏覽器中),也許我可以嘗試一下,因為我正在使用 Electron.js 和 Electron.js 使用 Chromium 88369888.js瀏覽器和 web 瀏覽器具有這些 API 的實現。

但是,這些 API 處理的是媒體流(= 視頻)仍然是一個問題,這不適合我的情況。 當然,我認為可以以某種方式從媒體 stream 中只取出一幀(?),但我認為這是一種過度工作,因為我想要的只是一個屏幕截圖。

同時,因為 Electron.js 也使用 Node.js,我認為也可以通過某種方式調用 Windows API(也許通過外部 Function 接口?)或調用child_process.exec()以截取屏幕截圖。

3.我想問的問題

如何訪問監視器圖像數據? 這樣我就可以實現“滿足我要求的截圖功能——透視&鼠標光標”(如果需要使用第三方庫,盡可能少)。

什么計算將要顯示在我的計算機顯示器上的最終圖像數據? 看來這是我的顯卡的作品,因為我的顯示器和顯卡是通過電纜相互連接的。

4. 雜項好奇心(與題目關系不大)

...然而,透明區域如何、為何以及在何處處理為#000000顏色是另一個好奇心。

同時有趣的是,有些程序不允許我截取它們上面的內容——程序所在的區域看起來是黑色的。 此類程序的開發人員如何實現這一點?


感謝您閱讀我的問題。

經過一些 inte.net 搜索后,我發現很難訪問和獲取顯示數據(特別是來自我的顯卡的視頻 ram數據)。 所以我決定使用一個變通辦法——這是一句眾所周知的格言,“萬事通羅馬”。

光標熒光筆示例

意思是,

  • 可以通過“使用本機屏幕截圖功能(PrintScreen 鍵)”或“使用一些為整個屏幕拍照的腳本”來實現透視屏幕截圖。
  • 鼠標 cursor 的屏幕截圖可以通過在我的鼠標 cursor 所在的坐標處添加(= 覆蓋)鼠標 cursor 圖像來實現。

但是,在我的情況下,我實際上不需要將屏幕截圖保存為文件,所以我認為只需繪制自定義鼠標 cursor 圖像就足夠了,隱藏原始鼠標 cursor 圖像,使其跟隨鼠標 cursor,然后截取屏幕截圖手動按鍵。 (我認為使用 PrintScreen 按鍵截取屏幕截圖,從剪貼板獲取屏幕截圖數據並進行一些圖像處理,例如添加與鼠標相關的效果也是一個可行的選擇 cursor。

※ 我看到一個模擬“按鍵”( SendKey() )的代碼來截取屏幕截圖,我認為這是一個很好的方法,因為不需要手動按鍵。


我想對這個主題感興趣的人可能會從以下鏈接中找到幫助(數字順序不代表重要性):

提到的關鍵字: GetDC()、BitBlt()、CAPTUREBLT 標志、GDI

提到的關鍵字: DirectX,緩沖區

提到的關鍵字:鼠標cursor,cursor圖像,熱點

提到的關鍵詞: PowerShell,CopyFromScreen()

Q/A 關於訪問視頻 memory

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM