Выбор области вывода AVCaptureStillImage

Вот проблема, с которой я сталкиваюсь при сохранении изображения, снятого с камеры, в приложении для iOS, написанном на Swift. Я коплю не совсем то, что хочу, я коплю больше, чем нужно, и это нехорошо.

Это два соответствующих фрагмента кода для этой проблемы.

Во-первых, когда сеанс начинается, как видно, я смотрю только на область в форме эллипса:

    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 или что-то, что мне нужно сделать, чтобы добиться того, чего я хочу?


person Michel    schedule 05.01.2016    source источник