我正在用我的相机做一个使用AVFoundation/AVFoundation.h的项目。现在,我想实现屏幕的缩放。
我在AVCaptureDevice上查看了文档,发现了一个名为"videoZoomFactor“的参数,它说它可以用来定义缩放速率。
因此,我使用了以下代码:
device.videoZoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold;但是应用程序崩溃了,并显示“videoZoomFactor超出范围”。这是怎么发生的?我应该怎么做才能使相机变焦?
发布于 2014-04-01 23:24:05
在下面的代码片段中,它可以正确地为我工作:
if ([device respondsToSelector:@selector(setVideoZoomFactor:)]) {
if ([ device lockForConfiguration:nil]) {
float zoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold;
[device setVideoZoomFactor:zoomFactor];
[device unlockForConfiguration];
}
}尝试记录device.activeFormat.videoZoomFactorUpscaleThreshold并查看其实际值是什么。
发布于 2015-06-24 22:03:21
您需要先检查预设,使用- (BOOL)supportsAVCaptureSessionPreset:(NSString *) sessionPreset
此外,device.videoZoomFactor范围应在1.0和2.0之间,因此在进行设置之前,请先检查范围。
发布于 2016-08-16 22:47:40
// in class
CGFloat zoomBegin;
CGFloat zoomMax;
// on create video connection
NSError *error;
if( YES == [camDevice lockForConfiguration:&error] )
{
// A maximum zoom factor of 1 indicates no zoom is available.
zoomMax = camDevice.activeFormat.videoMaxZoomFactor;
[camDevice unlockForConfiguration];
}
[self.view addGestureRecognizer:[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchToZoom:)]];
- (void)pinchToZoom:(UIPinchGestureRecognizer*)gesture
{
switch (gesture.state)
{
case UIGestureRecognizerStateBegan:
{
zoomBegin = camDevice.videoZoomFactor;
NSLog(@"zoom begin:%.3f", zoomBegin);
}break;
case UIGestureRecognizerStateChanged:
{
CGFloat zoomTo = zoomBegin + (gesture.scale * 2 - 2);
// step 0.01 between 1.0 and zoomMax (4x on iPhone 6s)
int msc = (int)(((zoomTo+0.001)*100))%100;
zoomTo = (NSInteger)zoomTo + msc * 0.01;
zoomTo = fmaxf(1, fminf(zoomTo, zoomMax));
if ( camDevice.videoZoomFactor != zoomTo )
{
dispatch_async(sessionQueue, ^{
NSError *error;
if ( YES == [camDevice lockForConfiguration:&error] )
{
camDevice.videoZoomFactor = zoomTo;
[camDevice unlockForConfiguration];
NSLog(@"zoom changed:%.3f", zoomTo);
}
});
}
}break;
default:
break;
}
}https://stackoverflow.com/questions/21169909
复制相似问题