Цель : я хочу периодически делать скриншот окна в OSX.
Следуя инструкциям Apple, мне удалось создать простой рабочий код, который очень хорошо захватывает содержимое окна.Однако проблема в том, что примерно 1 из 50 изображений по какой-то причине искажается.
Я использую функцию CGWindowListCreateImage для периодического захвата содержимого окна, но он продолжает производить мусор со временем
это мой простой код:
CGImageRef img = CGWindowListCreateImage(CGRectNull,
kCGWindowListOptionIncludingWindow,
wc->window.window_id, wc->image_option);
if (!img)
return;
char path_str[1024];
snprintf(path_str, 1023, "/tmp/obs/image%llu.png", ts);
// here is just output image to file "as is"
CFURLRef path =
CFURLCreateWithFileSystemPath(NULL,
__CFStringMakeConstantString(path_str),
kCFURLPOSIXPathStyle, false);
// file/format to save pixels to
CGImageDestinationRef destination =
CGImageDestinationCreateWithURL(
path, CFSTR("public.png"), 1, NULL); //[4]
// add our captured pixels
CGImageDestinationAddImage(destination, img, nil);
// generate the image
if (!CGImageDestinationFinalize(destination)) {
printf("Failed to finalize\n");
}
Я провел тест для разных приложений и окон, поэтому результат выглядит так:
Хорошая картинка (чтоя ожидаю от кода выше)
Неработающая картинка (такая картинка была сделана случайно ~ 1/50)
Что я уже пробовал:
На данный момент я предполагаю CGWindowListCreateImage глючит или что-то в этом роде.Кто-нибудь видел нечто подобное?