xcode 您如何使用 AVCaptureStillImageOutput,尤其是 captureStillImageAsynchronouslyFromConnection?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3622717/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 19:41:38  来源:igfitidea点击:

How do you use AVCaptureStillImageOutput, captureStillImageAsynchronouslyFromConnection in particular?

iphonexcodeavfoundation

提问by Shizam

How do you setup the completion handler for:

您如何设置完成处理程序:

captureStillImageAsynchronouslyFromConnection:completionHandler:

captureStillImageAsynchronouslyFromConnection:completionHandler:

for AVCaptureStillImageOutput?

对于 AVCaptureStillImageOutput?

  • (void)captureDelegate:(CMSampleBufferRef)buffer error:(NSError *)error;
  • (void)captureDelegate:(CMSampleBufferRef)buffer error:(NSError *)error;

?

?

回答by Nico Prananta

use block. something like this:

使用块。像这样:

[[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:videoConnection
                                                     completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
                                                         if (imageDataSampleBuffer != NULL) {
                                                             NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
                                                             UIImage *image = [[UIImage alloc] initWithData:imageData];                                                                 
                                                             ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
                                                             [library writeImageToSavedPhotosAlbum:[image CGImage]
                                                                                       orientation:(ALAssetOrientation)[image imageOrientation]
                                                                                   completionBlock:^(NSURL *assetURL, NSError *error){
                                                                                       if (error) {
                                                                                           id delegate = [self delegate];
                                                                                           if ([delegate respondsToSelector:@selector(captureStillImageFailedWithError:)]) {
                                                                                               [delegate captureStillImageFailedWithError:error];
                                                                                           }                                                                                               
                                                                                       }
                                                                                   }];
                                                             [library release];
                                                             [image release];
                                                         } else if (error) {
                                                             id delegate = [self delegate];
                                                             if ([delegate respondsToSelector:@selector(captureStillImageFailedWithError:)]) {
                                                                 [delegate captureStillImageFailedWithError:error];
                                                             }
                                                         }
                                                     }];