Capture d'image actuelle de la caméra à l'aide de AVFoundation
J'essaie de capturer l'image et l'enregistrer dans une variable lorsque j'appuie sur "myButton". Que dois-je faire?
Mon code est comme suit:
import UIKit
import AVFoundation
import MobileCoreServices
class ViewController: UIViewController {
let captureSession = AVCaptureSession()
var previewLayer : AVCaptureVideoPreviewLayer?
var captureDevice : AVCaptureDevice?
@IBOutlet var myTap: UITapGestureRecognizer!
@IBOutlet weak var myButton: UIButton!
@IBAction func shotPress(sender: UIButton) {
//Save image to variable somehow
})
var stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if captureSession.canAddOutput(stillImageOutput) {
captureSession.addOutput(stillImageOutput)
}
}
override func viewDidLoad() {
super.viewDidLoad()
captureSession.sessionPreset = AVCaptureSessionPresetHigh
let devices = AVCaptureDevice.devices()
for device in devices {
if (device.hasMediaType(AVMediaTypeVideo)) {
if(device.position == AVCaptureDevicePosition.Back) {
captureDevice = device as? AVCaptureDevice
if captureDevice != nil {
beginSession()
}
}
}
}
}
func updateDeviceSettings(focusValue : Float, isoValue : Float) {
if let device = captureDevice {
if(device.lockForConfiguration(nil)) {
device.focusMode = AVCaptureFocusMode.ContinuousAutoFocus
device.unlockForConfiguration()
}
}
}
func beginSession() {
var err : NSError? = nil
captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err))
if err != nil {
println("error: \(err?.localizedDescription)")
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
self.view.layer.addSublayer(previewLayer)
self.view.bringSubviewToFront(myButton)
previewLayer?.frame = self.view.layer.frame
captureSession.startRunning()
}
}
Ce que vous avez à faire est d'essayer de saisir la samplebuffer pour cette image. Vous pouvez le faire en appelant
func captureStillImageAsynchronouslyFromConnection(_ connection: AVCaptureConnection!,completionHandler handler: ((CMSampleBuffer!,NSError!) -> Void)!)
sur votre AVCaptureStillImageOutput. Passer un gestionnaire d'achèvement, dans lequel vous allez faire que vous voulez avec votre image.OriginalL'auteur 9kv | 2015-01-05
Vous devez vous connecter pour publier un commentaire.
C'est ce que j'utilise l'un de l'application que je suis en train de travailler sur. Devraient être utiles pour votre problème ainsi.
bonjour, vous pouvez remplacer les lignes ci-dessous imagée de données avec var données images = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer) var image = UIImage(données: données images,échelle:1.0) //Enregistrer la capture d'aperçu de l'image UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
je pense que tu veux: CGColorRenderingIntent.RenderingIntentDefault
OriginalL'auteur Nabin Singh
Mis à jour pour Swift 3:
OriginalL'auteur Ngoan Nguyen