Как получить изображение закадрового NSWindow? - PullRequest
3 голосов
/ 28 октября 2010

Я пытаюсь получить изображение внеэкранного окна для использования в анимации на основе CALayer, но независимо от того, какой метод я пробую, я не могу вывести изображение на другую сторону.Вот код, который я использовал для пользовательского подкласса NSWindow в моем проекте:

CGImageRef windowImage = CGWindowListCreateImage(CGRectNull, 
                                                 kCGWindowListOptionAll, 
                                                 (CGWindowID)[self windowNumber], 
                                                 kCGWindowImageDefault);

Вот как должно выглядеть изображение:

alt text

и вот что я получаю (не обращая внимания на немного больший размер - это моя ошибка в рендеринге изображения):

alt text

Может кто-нибудь увидеть, где я иду не так??Как ни странно, Quartz Debug может видеть изображение окна без проблем, но пример кода Son of Grab от Apple не может.

1 Ответ

2 голосов
/ 28 октября 2010

Из комментария к документации для CGWindowListCreateImage в CGWindow.h:

kCGWindowListOptionAll, kCGWindowListOptionOnScreenOnly: используйте все экранные окна в этом пользовательском сеансе для построения изображения.Параметр windowID должен быть kCGNullWindowID.

Вот почему вы получаете снимок экрана со всеми интересующими вас прямоугольниками.

Комусделайте скриншот определенного окна, используйте kCGWindowListOptionIncludingWindow.

...