2013-03-16 17 views
9

Muszę dodać możliwość robienia zrzutów ekranu do moich aplikacji OSX, ale wersja demonstracyjna Apple daje mi tylko obraz całego ekranu, chcę tylko wyświetlić obraz mojego okna aplikacji.Wykonywanie zrzutów ekranu programowo w mac tylko dla okna aplikacji

Mój kod to:

NSInteger displaysIndex = 0; 
if(displays != nil) 
{ 
    free(displays); 
} 


CGError    err = CGDisplayNoErr; 
CGDisplayCount  dspCount = 0; 

/* How many active displays do we have? */ 
err = CGGetActiveDisplayList(0, NULL, &dspCount); 

/* If we are getting an error here then their won't be much to display. */ 
if(err != CGDisplayNoErr) 
{ 
    return; 
} 
/* Allocate enough memory to hold all the display IDs we have. */ 
displays = calloc((size_t)dspCount, sizeof(CGDirectDisplayID)); 

// Get the list of active displays 
err = CGGetActiveDisplayList(dspCount, 
          displays, 
          &dspCount); 

/* Make a snapshot image of the current display. */ 
CGImageRef image = CGDisplayCreateImage(displays[displaysIndex]); 

Co należy zmienić w kodzie, więc będę się tylko moje okno aplikacji?

Odpowiedz

6

Proste.

NSImage *captureImage = [[NSImage alloc] initWithData:[self.view dataWithPDFInsideRect:[self.view bounds]]]; 

proszę sprawdzić i dać mi znać. To jest przechwycone bieżące aktywne okno.

+3

Spowoduje to przechwycenie tylko zawartości widoku i jego potomków; nawet jeśli zaadresujesz to do widoku zawartości okna, to nadal będzie wykluczać ramkę okna. Można również pominąć konwersję do pliku PDF i od niego, blokując fokus na obrazie i wysyłając widok komunikat 'drawRect:' (zazwyczaj nie jest to gwarantowane, ale w tym przypadku jest to odpowiednie) lub za pomocą 'bitmapImageRepForCachingDisplayInRect:' i odpowiednią metodę tego obrazu i dodanie repu do pustego obrazu. –

Powiązane problemy