Зеркальное отображение части экрана на внешний дисплей (в OSX) - PullRequest
2 голосов
/ 30 апреля 2010

Я хотел бы написать программу, которая может отразить часть основного дисплея в новом окне. В идеале это новое окно может быть отображено на внешнем мониторе. Я видел эту слабость для полетной программы, которая делает это на ПК (многофункциональный экстрактор дисплея).

Нажмите здесь, чтобы увидеть скриншот программы (MFD Extractor)

Это было бы живое окно, т.е. Постоянно обновляемый видеодисплей, а не просто статичная графика.

Я искал лупы для экрана или клиентов vnc, но думаю, что мне нужно написать что-то с нуля. Я попытался немного почитать о программировании на osx, но с чего мне начать, чтобы получить доступ к дисплею? Мне как-то нужно извлечь графику из конкретной программы. Лучше всего подойти к конечной стадии вывода (отдельные пиксели, отправленные на дисплей) или куда-нибудь ближе к этапу управления окнами.

Любые идеи или указатели будут высоко оценены. Мне просто нужно с чего-то начать.

С уважением,

1 Ответ

0 голосов
/ 02 мая 2010

Есть несколько способов сделать это:

  1. Quartz Display Services позволит вам получить доступ к видеопамяти для экрана.
  2. Службы Quartz Window (a.k.a. CGWindow) позволят вам создать изображение всего, что находится под окном. Если вы создаете без полей , прозрачный , пустой, высокий уровень окно, рамка которого занимает весь экран , все под ним будет все на этом экране. (Конечно, вы можете создать меньшее окно, чтобы скопировать часть экрана.)
  3. Есть также способ сделать это с помощью OpenGL, который я никогда полностью не понимал. Эту технику демонстрируют несколько примеров кода: OpenGLScreenSnapshot и OpenGLCaptureToMovie . Однако CGWindow более или менее устарела.

Каждый из них даст вам изображение, которое вы сможете затем показать или записать в файл или что-то еще.

Чтобы показать изображение, используйте NSImageView или IKImageView . Если вы хотите увеличить его, IKImageView имеет свойство zoomFactor, но если вы хотите масштабировать ближайшего соседа (например, Pixie, DigitalColor Meter или xScope ), я думаю, вам нужно написать пользовательский посмотреть на это (но даже это не так уж сложно).

...