2016-04-07 16 views
0

私の目標は、ユーザーがボタンを押すと、できるだけ速くキャプチャされ、最後にiPhoneにフォトアルバムに保存されるということです。できるだけ早くいくつかのビデオフレームを取得する

私は迅速に慣れていないので、私は非常にお粗末な実装を使用します。私は0でint番号を定義し、ユーザーがボタンを押したときにキャプチャしたいフレーム番号に変更します。

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { 
    if(number>0) { 
     let rawImage:UIImage = self.imageFromSampleBuffer(sampleBuffer) 
     let img = UIImagePNGRepresentation(rawImage) 
     let pngImg = UIImage.init(data: img!) 
     UIImageWriteToSavedPhotosAlbum(pngImg!, nil, nil, nil) 
     print("PNG frame write to photo album successfully") 
     number = number!-1; 
    } 

} 

私の質問は次のとおりです:

1)私がコントロールに押しボタンを使用するには、よりエレガントかつ安全な方法を使用することはでき

var number:Int? = 0 

@IBAction func takeFrames(sender: UIButton) { 
    self.number=5; 
} 

は、デリゲートに、私は写真アルバムにこれらのフレームを保存しますキャプチャするフレーム?

2)現在のところ、フレームを1つずつ保存するため、できるだけ早くフレームをキャプチャするという目標を達成できません。必要なフレームをすべてキャプチャして、最後に1回フォトアルバムに保存してください?

ありがとうございます。

let imageArray: NSMutableArray? 
    for _ in 0 ..< 5 { 
     let rawImage:UIImage = self.imageFromSampleBuffer(sampleBuffer) 
     let img = UIImagePNGRepresentation(rawImage) 
     let pngImg = UIImage.init(data: img!) 
     imageArray?.addObject(pngImg!) 

    } 
    for image in imageArray! { 
     UIImageWriteToSavedPhotosAlbum(image as! UIImage, nil, nil, nil) 
    } 
    print("PNG frame write to photo album successfully") 

スウィフトは時々文の中に混乱することができます。

答えて

0

はこれをやってみてください。これは '5'の画像を取ります。

+0

ありがとうございました。あなたの提案に続いて、私は "var imageArray = [CMSampleBuffer?]()"を使ってすべてのフレームを取得し、最後に変換と保存作業を行います。私の質問1)のための任意の提案? –

+0

@淳花はわかりません。ガードステートメントまたはtryブロックを使用してみることができます。それは間違いなくそれを安全にするでしょう。私はあなたがうまいと思う。 –

関連する問題