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