将AVCaptureStillImageOutput修改为AVCapturePhotoOutput

时间:2017-01-01 22:05:24

标签: swift xcode avfoundation

我目前正在编写一段代码,如下所示:

if error == nil && (captureSession?.canAddInput(input))!
{
    captureSession?.addInput(input)

    stillImageOutput = AVCaptureStillImageOutput()
    //let settings = AVCapturePhotoSettings()
    //settings.availablePreviewPhotoPixelFormatTypes =
    stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]

    if (captureSession?.canAddOutput(stillImageOutput))!
    {
        captureSession?.addOutput(stillImageOutput)

        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
        previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
        cameraView.layer.addSublayer(previewLayer!)
        captureSession?.startRunning()
    }
}

我知道我应该使用AVCapturePhotoOutput()代替AVCaptureStillImageOutput(),但如果我做出更改,我会对如何转换剩余的块感到困惑。

具体来说,如何使用评论let settings = AVCapturePhotoSettings()

应用相同的设置

供参考,我使用this教程作为指导。

由于

1 个答案:

答案 0 :(得分:2)

Apple文档对How to use AVCapturePhotoOutput

非常清楚

这些是拍摄照片的步骤。

  • 创建AVCapturePhotoOutput对象。使用其属性确定支持的捕获设置并启用某些功能(例如,是否捕获实时照片)。
  • 创建并配置AVCapturePhotoSettings对象,以选择特定捕获的功能和设置(例如,是否启用图像稳定或闪存)。
  • 通过将照片设置对象传递给capturePhoto(使用:delegate :)方法以及实现AVCapturePhotoCaptureDelegate协议的委托对象来捕获图像。然后,照片捕获输出会呼叫您的代理人在捕获过程中通知您重大事件。

在您的clickCapture方法中使用以下代码,并且忘记在您的课程中确认并实施委派。

rptInventoryStock.LocalReport.DataSources.Add(new ReportDataSource("IOOP_DatabaseDataSet", dtbl));

如果你想知道从avfoundation捕捉照片的不同方式,请查看我以前的SO answer