Как вернуть изображение из AV Foundation все еще и добавить его в графический контекст для скриншота?

У меня есть предварительный просмотр камеры, который отлично работает. Я хочу сделать снимок экрана и все на нем. Однако, поскольку обычный подход к скриншоту: renderInContext CALayer не отображает содержимое с камеры, мне нужно добавить его отдельно.

У меня есть эта функция в моем контроллере просмотра, который захватывает изображение и сохраняет его в рулоне камеры.

@IBAction func snapStillImage(sender: AnyObject) { print("snapStillImage") (self.previewView.layer as! AVCaptureVideoPreviewLayer).connection.enabled=false; dispatch_async(self.sessionQueue, { // Update the orientation on the still image output video connection before capturing. let videoOrientation = (self.previewView.layer as! AVCaptureVideoPreviewLayer).connection.videoOrientation self.stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo).videoOrientation = videoOrientation // Flash set to Auto for Still Capture ViewController.setFlashMode(AVCaptureFlashMode.Auto, device: self.videoDeviceInput!.device) self.stillImageOutput!.captureStillImageAsynchronouslyFromConnection(self.stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo), completionHandler: { (imageDataSampleBuffer: CMSampleBuffer!, error: NSError!) in if error == nil { let data:NSData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer) let image:UIImage = UIImage( data: data)! let libaray:ALAssetsLibrary = ALAssetsLibrary() let orientation: ALAssetOrientation = ALAssetOrientation(rawValue: image.imageOrientation.rawValue)! libaray.writeImageToSavedPhotosAlbum(image.CGImage, orientation: orientation, completionBlock: nil) print("save to album") }else{ // print("Did not capture still image") print(error) } }) }) } 

Я хочу вернуть изображение, определенное с let image:UIImage = UIImage( data: data)! так что он доступен следующей функцией

 @IBAction func downloadButton(sender: UIButton) { //Create the UIImage UIGraphicsBeginImageContextWithOptions(previewView.frame.size, false, 0.0) previewView.layer.renderInContext(UIGraphicsGetCurrentContext()!) //ALSO ADD image captured with captureStillImageAsynchronouslyFromConnection right here to the context. let image = UIGraphicsGetImageFromCurrentImageContext() //Save it to the camera roll UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) } 

Это позволит моему скриншоту включать недавно снятое изображение, а также все материалы сверху, которые добавляются с помощью UIGraphicsGetCurrentContext ()!

Я слышал, что вы делаете это, включив изображение в блок обработчика завершения, уже включенный в функцию captureStillImageAsynchronouslyFromConnection, но я не совсем уверен, как это сделать. Какие-либо предложения?

2 Solutions collect form web for “Как вернуть изображение из AV Foundation все еще и добавить его в графический контекст для скриншота?”

Вы могли бы добавить захваченное неподвижное изображение как UIImage в качестве подсмотра предварительного просмотра. Затем сделайте вызов renderInContext.

Предполагая, что этот код происходит в одном классе, вы можете сделать изображение таким свойством, как

 class CameraViewController: UIViewController { var image: UIImage! ... 

Затем в captureStillImageAsynchronouslyFromConnection

вместо

 let image:UIImage = UIImage( data: data)! 

использование

 self.image = UIImage( data: data)! 

Затем в downloadButton используйте

 var imageView = UIImageView(frame: previewView.frame) imageView.image = self.image previewView.addSubview(imageView) previewView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 

Затем вы можете удалить imageView, если хотите

 imageView.removeFromSuperview() 

Вы не можете отображать содержимое с камеры, поскольку визуализатор CALayer не работает.

Тем не менее вы хотите работать, эта ссылка может вам помочь.

Снимок экрана при включенной функции -iOS

https://developer.apple.com/library/ios/qa/qa1702/_index.html#//apple_ref/doc/uid/DTS40010192

  • iOS - Лучшая практика для сохранения изображений локально - NSCache и Save in Document Directory
  • Лучшие практики для управления фотографиями друзей facebook в приложении iOS
  • Как сделать полный скриншот экрана в Swift?
  • Сделайте снимок просмотра, не добавляя его на экран
  • SWIFT - Добавить изображение в режим предупреждения
  • Утечка памяти при изменении размера UIImage
  • Как я могу создать UIView с водяным знаком UIImageView позади?
  • Как изменить размер UIImages без боли?
  • setImageWithUrl не показывает изображение с самого начала
  • Как вы создаете UIImage View Programmatically - Swift
  • iOS & Swift - Как я могу получить и сохранить UIImage от пользователя?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.