Это похоже на простую задачу, но она меня заводит. Возможно ли преобразовать UIView, содержащий AVCaptureVideoPreviewLayer, в качестве подслоя в изображение, которое нужно сохранить? Я хочу создать обложку дополненной реальности и нажать кнопку, чтобы сохранить изображение в рулоне камеры. Удерживание кнопки питания + домашняя клавиша захватывает скриншот на рулон камеры, что означает, что вся моя логика захвата работает, И эта задача возможна. Но я, похоже, не могу заставить его работать программно.Можно ли визуализировать AVCaptureVideoPreviewLayer в графическом контексте?
Я собираю предварительный просмотр изображения камеры с помощью AVCaptureVideoPreviewLayer. Все мои попытки вынести изображение не в состоянии:
previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
//start the session, etc...
//this saves a white screen
- (IBAction)saveOverlay:(id)sender {
NSLog(@"saveOverlay");
UIGraphicsBeginImageContext(appDelegate.window.bounds.size);
UIGraphicsBeginImageContext(scrollView.frame.size);
[previewLayer.presentationLayer renderInContext:UIGraphicsGetCurrentContext()];
// [appDelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(screenshot, self,
@selector(image:didFinishSavingWithError:contextInfo:), nil);
}
// это делает все, КРОМЕ для предварительного просмотра слоя, который является пустым.
[appDelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()];
Я где-то читал, что это может быть связано с проблемами безопасности iPhone. Это правда?
Для большей ясности: Я не хочу сохранять изображение для камеры. Я хочу сохранить прозрачный слой предварительного просмотра поверх другого изображения, создавая прозрачность. По какой-то причине я не могу заставить его работать.
Я думаю, что ОП и я пытаюсь, чтобы получить видеопоток с помощью avcapturevideopreviewlayer и пытаются добавить масштабируется изображение. Я пытаюсь добавить масштабированное изображение поверх живого видеопотока на основе распознавания лиц, а сохраненный снимок - это только оверлей, а не avcapturevideopreviewlayer. –
В графическом графическом изображении там добавляются фильтры на слоях, поэтому я уверен, что есть способ сохранить только текущий слой (есть метод в графическом изображении, чтобы сделать UIImage из кадра). Если вы хотите получить только то, что находится на дисплее, - там это способ сделать скриншот программным.Я не могу вспомнить его сейчас, но я видел его на stackoverflow) – Roma
Рома, большое спасибо за ваш ответ. Хотя я не использовал GPUImage, я, конечно, буду использовать его в ближайшее время. Спасибо, что разместили его в качестве альтернативного варианта. –