如何在Mac OS X上使用Haskell捕获屏幕?

时间:2013-03-21 07:02:25

标签: macos haskell screen-capture

如何在Mac OS X上使用Haskell捕获屏幕?

我看过Screen capture in Haskell?。但我正在研发Mac Mini。因此,Windows解决方案不适用,GTK解决方案不起作用,因为它只捕获黑屏。 Mac中的GTK只捕获黑屏。

3 个答案:

答案 0 :(得分:2)

  

如何使用...和OpenGL捕获屏幕?

只有运气好。 OpenGL主要是一个绘图API,主框架缓冲区的内容是未定义的,除非它由OpenGL自己绘制。 OpenGL可能被滥用是由于图形系统管理屏幕窗口的帧缓冲区的方式:在创建了没有预定义背景颜色/画笔的窗口之后,其初始帧缓冲内容就是窗口之前屏幕上的所有内容创建。如果在此基础上创建OpenGL上下文,则可以使用glReadPixels读取帧缓冲区,这样就可以创建屏幕截图。

今天窗口合成已成为滥用OpenGL几乎不可能截屏的常态。通过合成,每个窗口都有自己的屏幕外帧缓冲区,屏幕内容仅在最后合成。如果您在合成窗口系统上使用上面概述的依赖于包含所需内容的未初始化内存的方法,结果会在固体清晰颜色,严重扭曲的垃圾碎片和数据噪声之间变化很大。

由于可靠地拍摄屏幕截图必须考虑到系统的许多特性,因此编写真正可移植的屏幕截图程序几乎是不可能的。

OpenGL绝对是错误的工具,无论人们(包括我自己)过去都能滥用它。

答案 1 :(得分:0)

我编写了这个C代码来捕获Mac的屏幕并通过函数glDrawPixels在OpenGL窗口中显示它:

的OpenGL的capture.c

http://pastebin.com/pMH2rDNH

为Haskell编写FFI代码非常简单。我很快就会这样做。

答案 2 :(得分:-2)

这可能对在C中找到解决方案很有用:

NeHe Productions - 使用gluUnProject
http://nehe.gamedev.net/article/using_gluunproject/16013/

Apple Mailing Lists - Re:发布的屏幕快照示例代码
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

Grab Mac OS Screen using GL_RGB format