首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureDevice videoZoomFactor

AVCaptureDevice videoZoomFactor
EN

Stack Overflow用户
提问于 2014-01-17 02:27:01
回答 3查看 7.9K关注 0票数 2

我正在用我的相机做一个使用AVFoundation/AVFoundation.h的项目。现在,我想实现屏幕的缩放。

我在AVCaptureDevice上查看了文档,发现了一个名为"videoZoomFactor“的参数,它说它可以用来定义缩放速率。

因此,我使用了以下代码:

代码语言:javascript
复制
device.videoZoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold;

但是应用程序崩溃了,并显示“videoZoomFactor超出范围”。这是怎么发生的?我应该怎么做才能使相机变焦?

EN

回答 3

Stack Overflow用户

发布于 2014-04-01 23:24:05

在下面的代码片段中,它可以正确地为我工作:

代码语言:javascript
复制
if ([device respondsToSelector:@selector(setVideoZoomFactor:)]) {
    if ([ device lockForConfiguration:nil]) {
        float zoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold;
        [device setVideoZoomFactor:zoomFactor];
        [device unlockForConfiguration];
    }
}

尝试记录device.activeFormat.videoZoomFactorUpscaleThreshold并查看其实际值是什么。

票数 3
EN

Stack Overflow用户

发布于 2015-06-24 22:03:21

您需要先检查预设,使用- (BOOL)supportsAVCaptureSessionPreset:(NSString *) sessionPreset

此外,device.videoZoomFactor范围应在1.0和2.0之间,因此在进行设置之前,请先检查范围。

票数 0
EN

Stack Overflow用户

发布于 2016-08-16 22:47:40

代码语言:javascript
复制
// 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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21169909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档