¿Cómo retornar la image de AV Foundation aún captura y agregarlo al context de charts para una captura de pantalla?

Tengo una vista previa de la camera que funciona muy bien. Quiero tomar una captura de pantalla y todo sobre él. Sin embargo, dado que el enfoque de captura de pantalla habitual: el renderInContext de CALayer no genera contenido de la camera, debo agregarlo por separado.

Tengo esta function en mi vista, el controller captura la image y la guarda en el rollo de la camera.

@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) } }) }) } 

Quiero devolver la image definida con la let image:UIImage = UIImage( data: data)! para que sea accesible mediante la siguiente function

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

¡Esto permitiría que mi captura de pantalla incluya la image capturada recientemente, así como todas las cosas en la parte superior que se agreguen con UIGraphicsGetCurrentContext ()!

He escuchado que haces esto al include la image en el bloque de controller de finalización que ya se incluye en la function captureStillImageAsynchronouslyFromConnection, pero no estoy seguro de cómo hacerlo. ¿Alguna sugerencia?

Podría agregar la image fija capturada como UIImage como una subvista de previewView. Luego realice la llamada a renderInIntext.

Suponiendo que este código está sucediendo en la misma class, puede hacer que la image sea una propiedad como

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

Luego en captureStillImageAsynchronouslyFromConnection

en lugar de

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

utilizar

 self.image = UIImage( data: data)! 

Luego, en el uso del button de downloadButton

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

A continuación, puede eliminar la imageView si lo desea

 imageView.removeFromSuperview() 

No puede procesar el contenido de la camera porque el renderInContext de CALayer no funciona.

No obstante, desea trabajar en eso, el siguiente enlace lo puede ayudar.

Tomar una captura de pantalla cuando la camera está encendida -iOS

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