OC之AVCapturePhoto

AVCapturePhoto 用于通过AVCapturePhotoOutput收集的图像数据的容器。使用AVCapturePhotoOutput类拍摄照片时,委托对象将以AVCapturePhoto对象的形式接收每个生成的图像和相关数据。此对象是一个不可变的包装器,我们可以从中检索拍摄照片的各种结果。
除了照片图像像素缓冲区,AVCapturePhoto对象还可以包含预览大小的像素缓冲区,捕获元数据,以及在支持的设备上捕获深度数据和相机校准数据。从AVCapturePhoto对象,可以生成适合写入文件的数据,例如以HEIC文件格式包含的HEVC编码图像数据,包括预览图像,深度数据和其他附件。
AVCapturePhoto实例包装单个图像结果。 例如,如果请求对3张图像进行拍摄,则回调将被调用3次,每次都会传送一个AVCapturePhoto对象。

1、解决照片拍摄请求

属性(只读) 数据类型 描述
resolvedSettings AVCaptureResolvedPhotoSettings 用于请求此照片拍摄的设置对象,该对象的uniqueID值可以确定是哪次调用的-capturePhotoWithSettings:delegate:方法。
photoCount NSInteger 从 1 开始这张照片在同一拍摄请求序列中的索引,该次拍摄结果resolvedSettingsexpectedPhotoCount属性指示将为给定拍摄请求返回的图像总数。当协议方法-captureOutput:didFinishProcessingPhoto:error: 收到的photoCount值与expectedPhotoCount值匹配的照片时,我们确定收到了给定拍摄请求的最后一个。
timestamp CMTime 拍摄图像的时间;此时间戳始终与AVCapturePhotoOutput所连接的AVCaptureSession对象的主时钟时间同步。

2、访问照片像素数据

属性(只读) 数据类型 描述
rawPhoto BOOL 此照片对象是否包含RAW格式数据;当以RAW格式请求拍摄时,AVCapturePhotoOutput会多次调用协议方法-captureOutput:didFinishProcessingPhoto:error:,同时提供RAW照片数据和等效处理的照片。使用此属性可以区分同一捕获的RAW和处理结果。
pixelBuffer CVPixelBufferRef 照片的未压缩或RAW图像样本缓冲区;如果请求RAW格式的照片拍摄,或者没有压缩的处理格式(如TIFF),则可以使用此属性访问基础样本缓冲区;如果请求以JPEG或HEVC / HEIF等压缩格式捕获,则此属性的值为nil。使用fileDataRepresentationCGImageRepresentation方法获取压缩的图像数据。

3、访问预览图数据

属性(只读) 数据类型 描述
embeddedThumbnailPhotoFormat NSDictionary<NSString *,id> 描述预览图数据格式的字典 (参阅有关可能的视频设置词典键和值);如果在请求拍摄时通过指定AVCapturePhotoSettingsembeddedThumbnailPhotoFormat属性请求嵌入式缩略图,则此属性的值是嵌入缩略图的已解析视频设置字典。如果未请求嵌入的缩略图,则此属性的值为nil。
previewPixelBuffer CVPixelBufferRef 预览图的像素数据;如果在请求拍摄时通过指定AVCapturePhotoSettingspreviewPhotoFormat属性请求预览图,则此属性可以访问生成的预览图像数据。 像素缓冲区仅包含正确显示所需的最小附件。如果未请求预览图像,则此属性的值为nil。

4、访问照片元数据

属性(只读) 数据类型 描述
metadata NSDictionary<NSString *,id> 描述拍摄图像元数据的字典 (参阅CGImageProperties键和值);使用照片捕获的元数据可以包括图像方向,EXIF相机属性和动态照片元数据。
portraitEffectsMatte AVPortraitEffectsMatte 使用照片拍摄的人像效果遮罩。
cameraCalibrationData AVCameraCalibrationData 拍摄照片的相机设备的校准信息;仅当在请求拍摄时指定了cameraCalibrationDataDeliveryEnableddualCameraDualPhotoDeliveryEnabled设置时,才会显示摄像机校准数据。
depthData AVDepthData 照片拍摄的深度或视差图数据。在支持的设备上要请求捕获深度数据,在请求照片拍摄时将AVCapturePhotoSettings对象的depthDataDeliveryEnabled属性设置为YES。如果未请求深度数据传递,则此属性的值为nil。注意:如果在请求照片拍摄时将AVCapturePhotoOutputembedsDepthDataInPhoto属性设置为NO,则此属性仍提供深度数据,但在生成用于输出的照片文件数据时不包括该数据。
sourceDeviceType AVCaptureDeviceType 拍摄照片的设备类型;如果AVCapturePhoto对象不是来自AVCaptureDevice捕获,则此属性的值可以为nil。使用AVCaptureDeviceTypeBuiltInDualCamera设备和dualCameraDualPhotoDeliveryEnabled设置拍摄双张照片时,使用此属性确定两个生成的照片对象中的哪一个来自AVCaptureDeviceTypeBuiltInWideAngleCameraAVCaptureDeviceTypeBuiltInTelephotoCamera设备。对于所有其他捕获,此属性的值等于AVCapturePhotoOutput所连接的AVCaptureDevicedeviceType属性.

5、包装文件输出数据

- (NSData *)fileDataRepresentationWithCustomizer:(id<AVCapturePhotoFileDataRepresentationCustomizer>)customizer;

//生成并返回照片及其附件的数据;如果照片和附件数据无法转换则为nil。调用此方法可将图像像素缓冲区以及捕获期间创建的元数据和其他附件(如预览照片和深度图)格式化并打包为适合写入该类型文件的数据。
- (NSData *)fileDataRepresentation;

//提取并将拍摄的照片的主图像作为CoreGraphics图像对象返回;如果无法转换图像,则为nil。
- (CGImageRef)CGImageRepresentation;

//提取并将拍摄的照片的预览图像作为CoreGraphics图像对象返回;如果无法转换图像或未在AVCapturePhotoSettings请求预览图像,则为nil。
- (CGImageRef)previewCGImageRepresentation;

6、检查拍摄信息

属性(只读) 数据类型 描述
bracketSettings AVCaptureBracketedStillImageSettings 此照片的方括号内捕捉设置变化;当使用AVCapturePhotoBracketSettings类请求包围拍摄时,指定该对象的数组,指示要应用于括号中每个图像的捕获设置变化(如曝光补偿)。此属性指示与此特定照片关联的设置,如果此照片不是括号内捕获的一部分,则为nil。
sequenceCount NSInteger 从 1 开始,这张照片在括号内的拍摄序列中的索引。如果此照片是括号内捕获的一部分,则此属性指示序列中当前结果的计数;如果此照片不是括号内捕获的一部分,则此属性的值为0。
lensStabilizationStatus AVCaptureLensStabilizationStatus 有关在包围照片拍摄期间使用镜头稳定性的信息。

如果设备配置不支持OIS,则lensStabilizationStatus属性的值为AVCaptureLensStabilizationStatusUnsupported。如果支持OIS,但此捕获的照片不是来自请求OIS的括号内捕获,则此属性的值为AVCaptureLensStabilizationStatusOff。否则,此属性指示设备如何在括号内捕获期间应用OIS。

AVCaptureLensStabilizationStatus 在括号内的照片捕捉期间指示光学图像稳定硬件状态的常数。

描述
AVCaptureLensStabilizationStatusUnsupported 拍摄此照片的设备或设备配置无法使用镜头稳定功能。
AVCaptureLensStabilizationStatusOff 镜头稳定性未指定用于此照片拍摄。
AVCaptureLensStabilizationStatusActive 镜头稳定在整个拍摄期间都有效。
AVCaptureLensStabilizationStatusOutOfRange 照片捕捉启用了镜头稳定功能,但设备运动或捕捉持续时间超出了稳定模块的校正限制。
AVCaptureLensStabilizationStatusUnavailable 在拍摄照片期间,镜头稳定暂时无法使用。

本文涉及到的更多信息请阅读:
点击阅读 AVCaptureDevice
点击阅读 AVCaptureSession
点击阅读 AVCapturePhotoOutput
点击阅读 AVCapturePhotoSettings
点击阅读 AVCaptureResolvedPhotoSettings
点击阅读 AVCapturePhoto

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容