2

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

4

0 回答 0