AVCaptureStillImageOutput выбор области
Вот проблема, с которой я сталкиваюсь при сохранении изображения, снятого с камеры, в приложении для 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 или что-то, что мне нужно сделать, чтобы добиться того, чего я хочу?