将屏幕的一部分镜像到外部显示器(在OSX中)

时间:2010-04-30 17:04:20

标签: macos core-graphics quartz-graphics mirroring

我想编写一个程序,可以将主显示的一部分镜像到一个新窗口。理想情况下,这个新窗口可以显示在外部监视器上。我已经看到了这个在电脑(多功能显示器提取器)上执行此操作的飞行器的优点。

CLick here for a screenshot of the program (MFD Extractor)

这将是一个实时窗口即。 constantaly更新的视频显示不仅仅是静态图形。

我已经看过屏幕放大镜或vnc客户的想法,但我想我需要从头开始写一些东西。我试图在osx编程上做一些阅读,但我从哪里开始获取对显示器的访问?我不知何故需要从特定程序中提取图形。最好是靠近最终输出级(发送到显示器的各个像素)或靠近窗口管理阶段的某个位置。

任何想法或指示都会非常感激。我只需要从某处开始。

此致

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点:

  1. Quartz Display Services可让您访问屏幕的视频内存。
  2. Quartz Window Services(a.k.a. CGWindow)将让您创建窗口下方所有内容的图像。如果您创建一个borderlesstransparent,空,高 - level窗口,其框架占据整个screen,则其下方的所有内容都将显示在该屏幕上。 (当然,您可以创建一个较小的窗口来复制屏幕的一部分。)
  3. 还有一种方法可以使用我从未完全理解的OpenGL。一些代码示例OpenGLScreenSnapshotOpenGLCaptureToMovie证明了这种技术。不过,它或多或少地被CGWindow淘汰了。
  4. 每个图像都会为您提供一个图像,然后您可以显示或写入文件或其他内容。

    要显示图片,请使用NSImageViewIKImageView。如果要放大它,IKImageView具有zoomFactor属性,但如果您想要最近邻居缩放(如Pixie,DigitalColor Meter或xScope),我认为您需要编写自定义对此的看法(但即使这并不是那么难)。