2017-05-14 47 views
0

这里是我的设置:误差修改与AVCaptureSession到UIImage的斯威夫特卡伦特3

let captureSession = AVCaptureSession() 
captureSession.sessionPreset = AVCaptureSessionPresetPhoto 

let backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

do { 
    let input = try AVCaptureDeviceInput(device: backCamera) 
    captureSession.addInput(input) 
} catch { 
    print("can't access camera") 
    return 
} 

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
self.view.layer.addSublayer(previewLayer!) 

let videoOutput = AVCaptureVideoDataOutput() 
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "sample buffer delegate", attributes: .concurrent)) 

captureSession.addOutput(videoOutput) 
captureSession.startRunning() 

let pixelBuffer = CMSampleBufferGetImageBuffer(CMSampleBuffer) 
let cameraImage = CIImage(cvImageBuffer: pixelBuffer!) 


let comicEffect = CIFilter(name: "CIComicEffect") 

comicEffect!.setValue(cameraImage, forKey: kCIInputImageKey) 

let filteredImage = UIImage(ciImage: comicEffect!.value(forKey: kCIOutputImageKey) as! CIImage!) 

DispatchQueue.main.async() { 
    let image_view = UIImageView(image: filteredImage) 
    self.view = image_view 
} 

我得到两个错误。第一个错误是setSampleBufferDelegate():

Cannot convert value of type 'ViewController' to expected argument type 'AVCaptureVideoDataOutputSampleBufferDelegate!' 

第二个错误是CMSampleBufferGetImageBuffer():

Cannot convert value of type '(CMSampleBuffer).Type' (aka 'CMSampleBuffer.Type') to expected argument type 'CMSampleBuffer' 

剂量谁知道我可能做错了什么?

回答

0

对于第一个错误:

实施AVCaptureVideoDataOutputSampleBufferDelegate代表,这将给你AVCaptureOutputCMSampleBuffer当前会话。

class YourClass : AVCaptureVideoDataOutputSampleBufferDelegate {}

public func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!){ print("DidDropSampleBuffer") //use this CMSampleBuffer to get Image }

对于第二错误, 替换此:

let pixelBuffer = CMSampleBufferGetImageBuffer(CMSampleBuffer)

随着:

`func ciimageFromSampleBuffer(sampleBuffer : CMSampleBuffer) -> CIImage 
    { 
    let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
    let cameraImage = CIImage(cvImageBuffer: pixelBuffer!) 
    return cameraImage 
    }` 

此WIL我给你CIImage