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 回答