2010-10-28 41 views
3

J'essaie d'obtenir une image d'une fenêtre hors écran à utiliser dans une animation basée sur CALayer, mais peu importe la méthode que j'essaie, je ne peux pas obtenir une image de l'autre côté. Voici le code que je l'ai utilisé sur une coutume NSWindow sous-classe dans mon projet:Comment récupérer une image d'un NSWindow hors écran?

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

Ceci est ce que l'image devrait ressembler à:

alt text

et voici ce que je reçois (Ignore la taille légèrement plus grande - qui est ma faute dans le rendu de l'image):

alt text

Ca Personne ne voit où je vais mal? Étrangement, Quartz Debug peut voir l'image de la fenêtre sans problème, mais le Son of Grab sample code from Apple ne peut pas.

+0

Je veux également capturer une fenêtre hors écran. Avez-vous déjà trouvé une réponse à cela? – Sean

+0

Je voudrais confirmer que CGWindowListCreateImage ne capturera pas les fenêtres hors écran kCGWindowListOptionIncludingWindow sur 10.9. – GenericPtr

Répondre

2

Depuis le commentaire de documentation pour CGWindowListCreateImage à CGWindow.h:

kCGWindowListOptionAll, kCGWindowListOptionOnScreenOnly: Utilisez toutes les fenêtres à l'écran dans cette session utilisateur pour construire l'image. Le paramètre windowID doit être kCGNullWindowID.

C'est la raison pour laquelle vous obtenez une capture d'écran de toutes les fenêtres qui se trouvent dans le rectangle qui vous intéresse.

Pour prendre une capture d'écran d'une fenêtre spécifique, utilisez kCGWindowListOptionIncludingWindow.

+0

Merci Peter, j'aurais dû mentionner dans ma question que j'ai essayé cette option aussi en vain. La partie intéressante de ceci est que le rect qui a été capturé n'est pas le rect dans lequel la fenêtre est assise quand elle est à l'écran/visible. –