0

ユーザーにプレビューを表示していて、3 秒後に画像が撮影されます。

    [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
 {
 [session stopRunning]; 
     NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];

 }];

captureStillImageAsynchronouslyFromConnection には時間がかかるため、3 秒が経過する直前に電話を移動すると、撮影された画像はプレビュー (AVCaptureVideoPreviewLayer) に表示されているものと同じではなくなります。

これを避けることはできますか?

4

1 に答える 1

0

AVCaptureSession を停止する代わりに、プレビュー レイヤーをフリーズ/レンダリングしてみてください。

このコードを使用して CALayer から UIImage を作成し、プレビュー レイヤー上の UIImageView に画像を表示するだけです。このレンダリングが十分に速いかどうかはわかりませんが、試してみる価値はあります。

- (UIImage *)imageFromLayer:(CALayer *)layer
{
  UIGraphicsBeginImageContext([layer frame].size);

  [layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return outputImage;
}

このコードは次のものから取得されます。

CALayer の UIImage - iPhone SDK

于 2012-08-16T17:00:35.843 に答える