OC之AVCaptureResolvedPhotoSettings

AVCaptureResolvedPhotoSettings 正在进行或完整的照片拍摄请求所使用的功能和设置的说明,继承自NSObject

照片设置关系图.png

当调用AVCapturePhotoOutput实例的- capturePhotoWithSettings:delegate:方法拍摄照片时,需要在AVCapturePhotoSettings实例中对该次拍摄做一些设置。
拍摄开始时,AVCapturePhotoOutput会调用协议方法,并提供AVCaptureResolvedPhotoSettings对象,详细说明对该次拍摄有效的设置。AVCaptureResolvedPhotoSettings对象是不可变的,他们描述了一个已经发出的请求。

AVCaptureResolvedPhotoSettings对象的uniqueID属性与在请求拍摄时传递的AVCapturePhotoSettings对象的uniqueID值相匹配。使用此值可确定哪些协议方法调用对应于哪些拍摄请求。

某些AVCapturePhotoSettings参数是自动的,例如flashMode属性。对于此类设置,AVCapturePhotoOutput确定是否在拍摄时使用该功能。

输出静态照片或者动态照片的尺寸可能直到拍摄时才被设置。例如,当使用previewPhotoFormat设置指定缩略图大小时,AVCapturePhotoOutput会选择最符合请求大小的尺寸,同时保留拍摄照片的宽高比。当AVCapturePhotoOutput调用协议法时,需要使用AVCaptureResolvedPhotoSettings对象的previewDimensions属性来查找实际的预览图像尺寸。

1、解决照片拍摄请求

1.1、区分拍摄请求
@property(readonly) int64_t uniqueID;

uniqueID与在请求拍摄时传递的AVCapturePhotoSettings对象的uniqueID值相匹配。使用此值可确定哪些协议方法调用对应于哪些拍摄请求。

1.2、照片拍摄数量
//照片拍摄数量与这些设置相对应的拍摄请求。
@property(readonly) NSUInteger expectedPhotoCount;

当请求拍摄照片时,AVCapturePhotoOutput会根据AVCapturePhotoSettings设置多次调用-captureOutput:didFinishProcessingPhoto:error:方法。例如,如果要求使用JPEG和RAW格式的图像传送三次曝光的括号,则预期的照片数为6。
AVCapturePhotoOutput协议方法每个AVCapturePhoto对象的photoCount属性指示拍摄结果与此序列的关联位置。当收到的AVCapturePhoto对象的photoCount值与此预期照片数相匹配时,这就是针对给定拍摄请求的最后一张照片。

2、检查照片捕获设置

2.1、拍摄该照片是否开启闪光灯

相机闪光灯是否会为此拍摄开启,该值对应于AVCapturePhotoSettings的属性flashMode

@property(readonly, getter=isFlashEnabled) BOOL flashEnabled;

如果在请求拍摄时指定闪光模式为AVCaptureFlashModeAuto,则设备会在拍摄时自动选择是否根据场景内容使用闪光灯。因此,我们不知道闪光灯是否会在拍摄之前闪光。 当AVCapturePhotoOutput调用-captureOutput:willBeginCaptureForSettings:协议方法或拍摄过程中稍后出现的其他协议方法时,我们可以使用此属性来确定拍摄是否使用闪光灯。
如果设备太热,闪光灯也可能暂时禁用。在这种情况下,即使指定了闪光模式为AVCaptureFlashModeOn,闪光灯也不会闪光,并且传递给AVCapturePhotoCaptureDelegate方法中的参数AVCaptureResolvedPhotoSettingsflashEnabled值为NO。

2.2、是否启动防抖动

该次拍摄是否使用图像稳定,该值对应于AVCapturePhotoSettings的属性autoStillImageStabilizationEnabled

@property(readonly, getter=isStillImageStabilizationEnabled) BOOL stillImageStabilizationEnabled;

当此值为YES时,设备会在弱光条件下自动应用稳定功能以抵消手抖动。自动稳定始终包括数字图像稳定,并且还可以包括基于当前设备的光学镜头稳定。
如果在请求拍摄时指定自动稳定,则设备会根据拍摄时的场景内容自动选择是否使用图像稳定。因此,我们不知道在拍摄之前是否会使用稳定性。当AVCapturePhotoOutput调用-captureOutput:willBeginCaptureForSettings:协议方法或拍摄过程中稍后出现的其他协议方法时,可以使用此属性来确定是否启用稳定。

2.3、是否合并双镜头数据

该次拍摄是否合并来自双摄像头的图像数据,该值对应于AVCapturePhotoSettings属性autoDualCameraFusionEnabled

@property(readonly, getter=isDualCameraFusionEnabled) BOOL dualCameraFusionEnabled;

当该值为YES时,双摄像头设备自动组合来自两个摄像头的样本以产生更高质量的图像。仅当在支持的设备上使用AVCaptureDeviceTypeBuiltInDualCamera类型时,此属性才适用。
如果在请求拍摄时指定自动图像融合,则设备会根据拍摄时的场景条件自动选择是否使用图像融合。 因此,我们不知道图像融合是否会在拍摄之前使用。当AVCapturePhotoOutput调用-captureOutput:willBeginCaptureForSettings:协议方法或拍摄过程中稍后出现的其他协议方法时,可以使用此属性来确定图像融合是否处于活动状态。

3、检查输出尺寸

3.1、JPEG格式 与 RAW格式的宽高

拍摄照片的输出尺寸在拍摄时设置,具体取决于设备方向和AVCaptureSession配置;例如,当AVCaptureSession包含视频输出并且正在使用视频稳定时,拍摄的照片会更小。

这两个属性要在-captureOutput:didFinishProcessingPhoto:withPreviewPhoto:forSettings:bracketSettings:error:协议方法中提供传递的图像的尺寸。在早期的协议方法中使用此属性可在传递之前查找图像的大小。

//该次拍摄的JPEG格式的照片的宽高;如果仅拍摄 RAW 格式,则宽高均为0。
@property(readonly) CMVideoDimensions photoDimensions;

//该次拍摄的 RAW 格式照片的宽高;如果拍摄的照片不是 RAW 格式,则宽高均为0。
@property(readonly) CMVideoDimensions rawPhotoDimensions;
3.2、预览图 与 缩略图 的宽高

照片拍摄系统支持预览和缩略图作为拍摄照片中的全尺寸主图像的伴侣。预览图用于立即显示(如在iOS相机应用程序中拍摄时所见),因此可以在当前设备上进行全屏显示。缩略图用于嵌入输出图像文件中,并可由其他软件如文件浏览器中的快速查看,以允许用户快速查看图像而无需加载整个图像文件,缩略图的大小可能会受到限制,具体取决于输出文件格式。

这两个属性提供所请求的预览图或缩略图的尺寸,该尺寸在-captureOutput:didFinishProcessingPhoto:error:协议方法中提供。在早期的协议方法中使用此属性可在传递之前查找图像的大小。

3.2.1、预览图的宽高

该次拍摄的预览图的宽高(像素);如果未请求预览图像,则宽高均为0。

@property(readonly) CMVideoDimensions previewDimensions;

使用AVCapturePhotoSettings对象中的previewPhotoFormat属性,请求在拍摄的主要照片输出旁边传送预览图像。当请求预览时,AVCapturePhotoOutput会选择最符合我们要求的尺寸,同时保留拍摄照片的宽高比。宽高比由AVCaptureDeviceFormat和拍摄时的设备方向确定。

3.2.2、缩略图的宽高

该次拍摄的缩略图的宽高;如果不请求缩略图,则宽高均为0。

@property(readonly) CMVideoDimensions embeddedThumbnailDimensions;

使用AVCapturePhotoSettings对象中的embeddedThumbnailPhotoFormat属性,请求在拍摄的主要照片输出旁边传送缩略图图像。 当请求缩略图时,AVCapturePhotoOutput会选择最符合要求的尺寸,同时保留拍摄照片的宽高比。宽高比由AVCaptureDeviceFormat和拍摄时的设备方向确定。

//该次拍摄的RAW格式嵌入式缩略图的宽高。
@property(readonly) CMVideoDimensions rawEmbeddedThumbnailDimensions;
3.3、动态图片的宽高

该次拍摄的动态照片内容的宽高;如果不请求拍摄动态照片,则宽高均为0。

@property(readonly) CMVideoDimensions livePhotoMovieDimensions;

使用AVCapturePhotoSettings对象中的livePhotoMovieFileURL属性来请求拍摄动态照片。动态照片尺寸可能会根据用于拍摄的设备相机而改变。
此属性在-captureOutput:didFinishProcessingLivePhotoToMovieFileAtURL:withDuration:photoDisplayTime:forSettings:error: 协议方法提供动态照片内容的维度。在早期协议方法中使用此属性可在传递之前查找影片的尺寸。

//该次拍摄的肖像效果遮罩的宽高。
@property(readonly) CMVideoDimensions portraitEffectsMatteDimensions;

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

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

推荐阅读更多精彩内容