在使用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如何工作,或者我需要做些什么来实现我想要的?