如何在Mac OS X上用Haskell捕捉屏幕?我已閱讀Screen capture in Haskell?。但我正在研究Mac Mini。因此,Windows解決方案不適用,GTK解決方案無法工作,因爲它只捕獲黑屏。 Mac上的GTK只能捕捉黑屏。如何在Mac OS X上使用Haskell捕獲屏幕?
回答
我編程該C代碼來捕捉的Mac的屏幕,並通過功能glDrawPixels到它顯示了在OpenGL窗口:
OpenGL的的capture.c
編碼的Haskell的FFI是相當微不足道的。我會很快做到的。
如何捕獲屏幕...和OpenGL?
只有一些運氣。 OpenGL主要是一個繪圖API,主幀緩衝區的內容是未定義的,除非它是由OpenGL函數自己繪製的。 OpenGL可能會被濫用是由於圖形系統管理其屏幕窗口的幀緩衝區的方式:在沒有預定義背景顏色/畫筆的窗口被創建之後,其初始幀緩衝區內容就是窗口之前屏幕上的所有內容創建。如果在此之上創建了OpenGL上下文,則可以使用glReadPixels讀取幀緩衝區,這樣就可以創建屏幕截圖。
今天窗口合成已經成爲濫用OpenGL截圖幾乎不可能的常態。通過合成,每個窗口都有自己的屏幕外幀緩衝區,屏幕內容僅在最後合成。如果您在合成窗口系統上使用了上述依賴於包含所需內容的未初始化內存的方法,則結果將在固體清晰顏色,嚴重扭曲的垃圾碎片與數據噪聲之間變化很大。
由於可靠地截圖必須考慮到這種情況發生的系統特性,因此實際上不可能編寫出真正的便攜式屏幕截圖程序。
而OpenGL絕對是它的錯誤工具,無論人們(包括我自己)在過去能否濫用它。
這可能是有用的,發現在C解決方案:
訥河製作 - 使用gluUnProject
http://nehe.gamedev.net/article/using_gluunproject/16013/
蘋果郵件列表 - 回覆:屏幕快照示例代碼發佈
http://lists.apple.com/archives/cocoa-dev/2005/Aug/msg00901.html
編譯Windows,Linux和OS X上的OpenGL程序
http://goanna.cs.rmit.edu.au/~gl/teaching/Interactive3D/2012/compiling.html
gluUnProject是如何幫助抓取* screenshot *的。這不是一個好的答案,即使它是錯誤的問題。 – datenwolf 2013-03-21 17:37:10
該鏈接解釋瞭如何以正確的方式使用glReadPixels來捕獲特定位置上單個像素的顏色。例如:鼠標的位置。 – 2013-03-21 22:24:08
但這不是OP要求的。 OP想要使用OpenGL來製作屏幕截圖,即不是隻讀回使用OpenGL渲染的內容,而是在整個顯示器上看到的內容。不需要重新計劃某個位置,也不能解決OP的問題。也就是說,OpenGL不是這方面的正確工具。並且您發佈的最後一個鏈接描述了一種技術,該技術依賴於未定義的行爲,這會破壞其在合成窗口管理器系統上的運行。 – datenwolf 2013-03-21 23:49:25
- 1. 如何在Mac OS X上的雙屏幕上顯示Lion
- 2. 如何在OS X上畫屏幕?
- 3. 如何在Mac OS X上使用mpi
- 4. 在Mac OS X上使用Web Start捕獲日誌記錄
- 5. Audio Hijack Pro如何在Mac OS X上捕獲系統音頻
- 6. Mac OS X Lion全屏幕事件
- 7. glGrab在Mac OS 10.7.3屏幕捕獲與XCode的4.3.2
- 8. 如何在Mac OS X Lion上使用AVCaptureSession從Bodelin ProScope HR捕獲幀?
- 9. 如何在Mac OS x中更改屏幕亮度?
- 10. OS X,屏幕鎖
- 11. 如何在Mac OS上安裝Haskell
- 12. 在Mac OS X Lion上的屏幕捕獲程序,在其他操作系統上更好的便攜式
- 13. 如何使用AVCaptureStillImageOutput捕獲Mac中的屏幕
- 14. 如何在Mac OS X中使用Cocoa或C++進行屏幕截圖
- 15. 如何使用ffmpeg捕獲Mac上的定時屏幕錄製文件
- 16. 在Mac OS X上使用鍵盤輸入的Java Swing全屏幕
- 17. 使用SDL捕獲屏幕?
- 18. 如何更改Java程序中的「關於」Mac OS X屏幕?
- 19. 實時獲取屏幕的平均顏色(Mac OS X)
- 20. 如何使用PHP,shell_exe和scrot捕獲x屏幕
- 21. 屏幕保護程序如何在Mac OS X和Linux上運行?
- 22. 在Mac OS X上獲取NSView相對於屏幕的邊框/邊界10.6
- 23. 使用DirectX捕獲Windows上的屏幕
- 24. 在Mac OS X應用程序中調整屏幕亮度
- 25. 浮動圖片屏幕上的Mac OS X
- 26. 使用CGDisplayStream捕獲屏幕
- 27. 屏幕捕獲使用目標c爲mac
- 28. 如何使用OpenSSL的在Mac OS X
- 29. 如何使用dylib在Mac OS X(C++)
- 30. 在Mac OS X上捕獲Python子流程輸出的問題
那麼,OpenGL會返回與GTK一樣的黑屏嗎?你在Mac上測試過一些代碼嗎? – 2013-03-21 15:44:51
@JuanCarlosKuriPinto:Macs是棘手的怪獸,因爲OpenGL深深紮根於操作系統,依靠未定義的OpenGL行爲意味着依賴於未定義的操作系統。此外,GTK +示例返回黑色屏幕的原因與OpenGL的未定義行爲相同:使用WM合成窗口DC的內容(無論是DC還是DC),將不包含屏幕上可見的圖像。 – datenwolf 2013-03-21 23:53:44