2

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

单击此处获取程序的屏幕截图(MFD Extractor)

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

我已经查看了屏幕放大镜或 vnc 客户端的想法,但我认为我需要从头开始写一些东西。我曾尝试阅读一些有关 osx 编程的资料,但在获得对显示器的访问权方面,我该从哪里开始呢?我不知何故需要从特定程序中提取图形。最好靠近最终输出阶段(发送到显示器的单个像素)还是靠近窗口管理阶段的地方。

任何想法或指示将不胜感激。我只需要从某个地方开始。

问候,

4

1 回答 1

0

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

  1. Quartz Display Services可让您访问屏幕的视频内存。
  2. Quartz Window Services(又名 CGWindow)将让您创建位于窗口下方的所有内容的图像。如果您创建一个无边框透明、空的高级窗口,其框架占据了整个屏幕,那么它下面的所有内容都将是该屏幕上的所有内容。(当然,您可以创建一个较小的窗口来复制屏幕的一部分。)
  3. 还有一种我从未完全理解的使用 OpenGL 的方法。该技术由几个代码示例OpenGLScreenSnapshotOpenGLCaptureToMovie 演示。不过,它或多或少已经被 CGWindow 淘汰了。

其中每一个都会为您提供一张图像,然后您可以将其显示或写入文件或其他内容。

要显示图像,请使用NSImageViewIKImageView。如果你想放大它,IKImageView 有一个zoomFactor属性,但如果你想要最近邻缩放(如 Pixie、DigitalColor Meter 或xScope),我认为你需要为此编写一个自定义视图(但即使这样也不是没那么难)。

于 2010-05-01T23:35:42.130 回答