2017-03-25 1 views
0

J'essaye de capturer la mémoire tampon de trame pour une application arbitraire sur Mac et de traiter les tampons de trame, image par image. Existe-t-il un moyen de puiser dans un tampon de trame interne d'applications? J'ai également remarqué que certaines fonctions de l'API graphique comme this peuvent capturer tout l'écran, mais je m'inquiète queAccédez au framebuffer pour une application MacOS arbitraire

A) Je vais devoir déterminer où se trouve ma fenêtre et la rogner de toute l'image de l'écran B) Comme il capture tout l'écran au lieu d'une seule fenêtre, j'imagine que cela prendra plus de temps. Je souhaite être capable de capturer et de traiter 20 images par seconde, donc la vitesse est très importante.

Répondre

3

J'ai quelques idées ...

Tout d'abord, et plus simplement, vous pouvez commencer à Quicktime (qui est fourni avec Mac OS) et aller à File ->New screen recording et enregistrer une zone arbitraire du écran et enregistrez-le dans un film et analyser les images plus tard.

Deuxièmement, vous pouvez utiliser screencapture (/usr/sbin/screencapture) et spécifier un rectangle à capturer ou un identifiant de fenêtre. La page de manuel est incorrect et les déchets, utilisez donc ce qui suit pour voir les options réelles:

screencapture -h 

Sortie

usage: screencapture [-icMPmwsWxSCUtoa] [files] 
    -c   force screen capture to go to the clipboard 
    -b   capture Touch Bar - non-interactive modes only 
    -C   capture the cursor as well as the screen. only in non-interactive modes 
    -d   display errors to the user graphically 
    -i   capture screen interactively, by selection or window 
       control key - causes screen shot to go to clipboard 
       space key - toggle between mouse selection and 
          window selection modes 
       escape key - cancels interactive screen shot 
    -m   only capture the main monitor, undefined if -i is set 
    -M   screen capture output will go to a new Mail message 
    -o   in window capture mode, do not capture the shadow of the window 
    -P   screen capture output will open in Preview 
    -I   screen capture output will in a new Messages message 
    -s   only allow mouse selection mode 
    -S   in window capture mode, capture the screen not the window 
    -t<format> image format to create, default is png (other options include pdf, jpg, tiff and other formats) 
    -T<seconds> Take the picture after a delay of <seconds>, default is 5 
    -w   only allow window selection mode 
    -W   start interaction in window selection mode 
    -x   do not play sounds 
    -a   do not include windows attached to selected windows 
    -r   do not add dpi meta data to image 
    -l<windowid> capture this windowsid 
    -R<x,y,w,h> capture screen rect 
    -B<bundleid> screen capture output will open in app with bundleidBS 
    files where to save the screen capture, 1 file per screen 

Comme vous pouvez le voir, le -l, -R options sont très utiles. J'ai écrit un petit programme pour obtenir une liste de windowidsin another answer, here.

La taille de la fenêtre et le format de fichier font la différence. Je trouve JPEG est normalement le plus rapide, et PNG est normalement le plus lent. Je peux obtenir 20 images par seconde avec une fenêtre de taille raisonnable en utilisant ceci:

time for i in {0..99}; do screencapture -l 56 -t jpg fred-$i.jpg; done 

où je suis le 56 du programme windowlist dans mon autre, réponse liée.

+0

Quicktime ne sera pas suffisant car j'ai besoin de traiter en temps réel, mais le screencapture est parfait. Je vais regarder dedans, merci beaucoup! – Nathan