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?
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. –