如何在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. 如何在OS X上画屏幕?
- 2. 如何在Mac OS X上使用mpi
- 3. glGrab在Mac OS 10.7.3屏幕捕获与XCode的4.3.2
- 4. 如何在Mac OS X Lion上使用AVCaptureSession从Bodelin ProScope HR捕获帧?
- 5. OS X,屏幕锁
- 6. 如何使用AVCaptureStillImageOutput捕获Mac中的屏幕
- 7. 如何在Mac OS X中使用Cocoa或C++进行屏幕截图
- 8. 如何使用ffmpeg捕获Mac上的定时屏幕录制文件
- 9. 使用SDL捕获屏幕?
- 10. 如何使用PHP,shell_exe和scrot捕获x屏幕
- 11. 实时获取屏幕的平均颜色(Mac OS X)
- 12. 如何更改Java程序中的“关于”Mac OS X屏幕?
- 13. 在Mac OS X上获取NSView相对于屏幕的边框/边界10.6
- 14. 屏幕保护程序如何在Mac OS X和Linux上运行?
- 15. 浮动图片屏幕上的Mac OS X
- 16. 屏幕捕获使用目标c为mac
- 17. 如何使用dylib在Mac OS X(C++)
- 18. 如何获得在MAC OS X上运行的KeePass 2.X
- 19. 如何使用Python在bash屏幕上捕获特定单词?
- 20. 如何在iPhone上使用UI自动捕获屏幕截图?
- 21. 如何使用Google Analytics在Android上捕获屏幕退出
- 22. 如何在Windows上使用Ruby捕获屏幕的一部分?
- 23. 如何捕获pygame屏幕?
- 24. 在MAC OS X上使用OpenCV 2.2 10.6
- 25. 在Mac OS X上使用DB2和jdbc
- 26. 在Mac OS X上使用virtualenv
- 27. 在Mac OS X上使用“statfs”?
- 28. 在Mac OS X上使用CGEvent Qt
- 29. 在Mac OS X上使用Gstreamer管道
- 30. 在MAC OS X上使用Xamarin的ServiceStack
那么,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