2017-05-14 44 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