概述
AVCaptureDevice提供videoZoomFactor
屬性逻炊,用用控制捕捉設(shè)備的縮放等級(jí)。
這個(gè)屬性最小值為1犁享,即不能進(jìn)行縮放的圖片余素。最大值由捕捉誰被屬性activeFormat
決定。它是AVCaptureDeviceFormat
的實(shí)例炊昆,還包含有設(shè)備支持的最大縮放值videoMaxZoomFactor
桨吊。
設(shè)備執(zhí)行縮放效果是通過居中裁剪由攝像頭傳感器捕捉到的圖片實(shí)現(xiàn)。所以過度放大會(huì)損失圖片質(zhì)量凤巨,具體根據(jù)需求判定视乐。
設(shè)置縮放系數(shù)有兩種方式:
- 1、直接設(shè)置
activeCamera.videoZoomFactor
if (!self.activeCamera.isRampingVideoZoom) {
NSError *error;
if ([self.activeCamera lockForConfiguration:&error]) {
// 如果捕捉設(shè)備當(dāng)前沒有將視頻縮放敢茁,需要鎖定設(shè)備進(jìn)行配置佑淀,與其他配置相同
CGFloat zoomFactor = pow([self maxZoomFactor], zoomValue);
//應(yīng)用程序提供的縮放范圍四1x到4x,這一增長是指數(shù)形式的彰檬,
//需要通過計(jì)算最大縮放因子的zoomValue次冪(0到1)來計(jì)算zoomFactor值伸刃。
self.activeCamera.videoZoomFactor = zoomFactor;
[self.activeCamera unlockForConfiguration];
} else {
[self.delegate deviceConfigurationFailedWithError:error];
}
}
- 2、通過方法
rampToVideoZoomFactor: withRate:
需要傳遞計(jì)算的zoomFactor和速率rate值(達(dá)到最終結(jié)果的速率逢倍,通常1-3)捧颅。
CGFloat zoomFactor = pow([self maxZoomFactor], zoomValue);
NSError *error;
if ([self.activeCamera lockForConfiguration:&error]) {
[self.activeCamera rampToVideoZoomFactor:zoomFactor withRate:1];
// rampToVideoZoomFactor: withRate:需要傳遞計(jì)算的zoomFactor和速率rate值。
[self.activeCamera unlockForConfiguration];
} else {
[self.delegate deviceConfigurationFailedWithError:error];
}
兩種方法區(qū)別在于值變化的過程较雕,最終的結(jié)果是一樣的碉哑。
附加屬性說明
1、
activeCamera.videoZoomFactor
當(dāng)前縮放值2亮蒋、
MIN(self.activeCamera.activeFormat.videoMaxZoomFactor, 4.0)
確定最大允許縮放因子扣典,4.0是個(gè)隨意值,不過需要定義一個(gè)合理的縮放范圍慎玖,通常不希望將內(nèi)容縮放至videoMaxZoomFactor
大小激捏,太大就不實(shí)用了。如果視圖設(shè)置縮放因子超過允許最大值凄吏,就會(huì)出現(xiàn)異常远舅。3闰蛔、
[activeCamera cancelVideoZoomRamp]
取消當(dāng)前縮放進(jìn)程,并設(shè)置zoomFactor為當(dāng)前狀態(tài)4图柏、添加縮放值變化監(jiān)聽
[self.activeCamera addObserver:self
forKeyPath:@"videoZoomFactor"
options:0
context:&THRampingVideoZoomContext];
[self.activeCamera addObserver:self
forKeyPath:@"rampingVideoZoom"
options:0
context:&THRampingVideoZoomFactorContext];
對(duì)應(yīng)兩種改變縮放系數(shù)的方法序六,添加不同的監(jiān)聽。
-
5蚤吹、驗(yàn)證是否支持縮放
videoMaxZoomFactor屬性例诀,用于控制設(shè)備的縮放等級(jí),這個(gè)屬性的最小值為1.0裁着,即不能進(jìn)行縮放的圖片繁涂。最大值由捕捉設(shè)備的activeFormat決定
- (BOOL)cameraSupportsZoom {
return self.activeCamera.activeFormat.videoMaxZoomFactor > 1.f;
}