OC之拍照AVCaptureStillImageOutput

AVCaptureStillImageOutputAVCaptureOutput具体子类,用来拍摄静态照片,该类在 iOS 10.0 中已弃用,不支持较新的相机拍照功能,如RAW图像输出和动态照片。在 iOS 10.0 及更高版本中,改用AVCapturePhotoOutput类。

1、拍照

调用下述方法拍照:

- (void)captureStillImageAsynchronouslyFromConnection:(AVCaptureConnection *)connection
completionHandler:(void (^)(CMSampleBufferRef imageDataSampleBuffer, NSError *error))handler;

拍照后要调用的 handler 中的参数:

  • 参数imageDataSampleBuffer :捕获的数据:包含适合于图像数据格式的元数据。例如,包含JPEG数据的缓冲区可以携带kCGImagePropertyExifDictionary作为附件。
  • 参数 error: 如果请求失败,返回NSError对象。

可以使用下述属性查看是否正在拍照:

@property(readonly, getter=isCapturingStillImage) BOOL capturingStillImage;

2、配置图像设置

属性 类型 描述
availableImageDataCVPixelFormatTypes NSArray<NSNumber *> 支持的图像像素格式,可以将其用作outputSettings属性中kCVPixelBufferPixelFormatTypeKey的值。
availableImageDataCodecTypes NSArray<AVVideoCodecType> 支持的图像编解码器格式,可以将其用作outputSettings属性中AVVideoCodecKey的值。

outputSettings|NSDictionary<NSString *,id>|输出设置。

3、图像格式转换

将静态图像数据CMSampleBufferRef转为NSData

+ (NSData *)jpegStillImageNSDataRepresentation:(CMSampleBufferRef)jpegSampleBuffer;
  • 参数CMSampleBufferRef: 携带 JPEG 图像数据的样本缓冲区,如果jpegSampleBufferNULL 或不是JPEG 格式,则此方法抛出异常NSInvalidArgumentException

本文涉及到的更多信息请阅读:
点击阅读 捕获设备AVCaptureDevice
点击阅读 捕获会话AVCaptureSession
点击阅读 捕获输出超类AVCaptureOutput
点击阅读 拍摄静态照片AVCaptureStillImageOutput
点击阅读 拍照AVCapturePhotoOutput
点击阅读 拍照协议方法AVCapturePhotoCaptureDelegate
点击阅读 预拍摄的照片设置AVCapturePhotoSettings
点击阅读 拍摄一组照片AVCapturePhotoBracketSettings
点击阅读 拍摄出的照片解析设置 AVCaptureResolvedPhotoSettings
点击阅读 拍照封装数据AVCapturePhoto

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容