AVCaptureStillImageOutput区域选择

时间:2016-01-05 03:04:24

标签: ios swift avcapturesession avcapture avcaptureoutput

在使用Swift编写的iOS应用程序中保存从相机拍摄的图像时,我面临的挑战。 我没有完全保存我想要的东西,我的储蓄超过了必要的水平,而且还不好。

这是此问题的两个相关代码块。

首先会话开始,我可以看到我只看到一个椭圆形的区域:

    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    previewLayer?.frame = self.view.layer.frame
    self.view.layer.addSublayer(previewLayer!)
    let maskLayer = CAShapeLayer()
    maskLayer.path = CGPathCreateWithEllipseInRect(CGRect(x: 50.0, y: 100.0, width: 200.0, height: 100.0), nil)
    previewLayer!.mask = maskLayer
    captureSession.startRunning()

保存图像并停止会话的第二个:

    if captureSession.running {
        if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) {
            stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) {
                (imageDataSampleBuffer, error) -> Void in
                if error == nil {
                    let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)
                    UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData)!, nil, nil, nil)
                } else {print("Error on taking a picture:\n\(error)")}
            }
        }

        captureSession.stopRunning()
    }

这是有效的,但是当我查看相册以查看已保存的内容时,我发现整张照片看起来好像没有限制椭圆,这不是我想要的。 理想情况下,我应该只保存椭圆内的那些像素。如果那是不可能的,我至少应该保留椭圆内的像素,将椭圆外的像素保存为一种独特的透明色。有没有办法控制AVCaptureStillImageOutput如何工作,或者我需要做些什么来实现我想要的?

0 个答案:

没有答案