

背面カメラで静止画が撮影できるアプリを作っています。  
カメラからの映像用に、プレビュー用のレイヤーを(x:100、Y:60、Width:545、Height:538)で作成しました。

プレビュー用のレイヤーはAVLayerVideoGravityResizeAspectFillで、アスペクト比は、  
そのままで、レイヤーからはみ出した部分は隠すようにしています。

撮影して生成されるUIimageは隠れた部分も含んでいるため、  
プレビュー用のレイヤーに表示されている部分だけ切り出したいと  
思いましたが、うまくいきませんでした。

撮影したそのままの画像サイズは1920x1080でした。  
これを縮小して、さらにトリミングするようなイメージになるのでしょうか？

表示プレビューと同じUIImageを生成する方法を教えていただけないでしょうか。

[code]

    var videoDataOutput : AVCaptureStillImageOutput!
    var videoLayer: AVCaptureVideoPreviewLayer!
    var cpsSession : AVCaptureSession!
    var captureDevice: AVCaptureDevice!
    
    for device: AnyObject in AVCaptureDevice.devices() {
        if device.position == AVCaptureDevicePosition.Back {
            captureDevice = device as! AVCaptureDevice
        }
    }
    
    let deviceInput = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: nil) as! AVCaptureDeviceInput
    videoDataOutput = AVCaptureStillImageOutput()
    self.cpsSession = AVCaptureSession()
    if (self.cpsSession.canAddInput(deviceInput)) {
        self.cpsSession.addInput(deviceInput as AVCaptureDeviceInput)
    }
    if (self.cpsSession.canAddOutput(videoDataOutput)) {
        self.cpsSession.addOutput(videoDataOutput)
    }
    
    // プレビュー用のビューを設定
    videoLayer = AVCaptureVideoPreviewLayer.layerWithSession(cpsSession) as! AVCaptureVideoPreviewLayer
    videoLayer.frame = CGRectMake(100, 60, 545, 538)
    videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    videoLayer.masksToBounds = true
    
    self.view.layer.addSublayer(videoLayer)
    cpsSession.startRunning()
    
    //切り出し処理
    let cropRect  = CGRectMake(0, 0, CGFloat(545), CGFloat(538))
    let cropRef   = CGImageCreateWithImageInRect(image.CGImage, cropRect)
    let cropImage = UIImage(CGImage: cropRef)
    //保存
    UIImageWriteToSavedPhotosAlbum(cropImage, self, nil, nil)
    
[/code]


CC BY-SA 3.0
2015-04-23T05:38:34.527
9505
2015-04-24T05:16:23.353
2015-04-24T05:16:23.353
3516
9183
question
ios swift
カメラのプレビューと同じサイズのUIImageの切り出しについて