2014-01-16 44 views
1

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

我检查了AVCaptureDevice上的文档,发现一个名为“videoZoomFactor”的参数,表示它可以用来定义缩放比率。

因此,我用下面的代码:

device.videoZoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold; 

,但应用程序崩溃,并显示「该videoZoomFactor超出范围。」 这是怎么回事?我该如何缩放相机?

回答

1

它正常工作对我来说,下面的代码片段:

if ([device respondsToSelector:@selector(setVideoZoomFactor:)]) { 
    if ([ device lockForConfiguration:nil]) { 
     float zoomFactor = device.activeFormat.videoZoomFactorUpscaleThreshold; 
     [device setVideoZoomFactor:zoomFactor]; 
     [device unlockForConfiguration]; 
    } 
} 

尝试登录device.activeFormat.videoZoomFactorUpscaleThreshold和看到的价值实际上是。

0

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

也device.videoZoomFactor范围应1.0和2.0之间,首先检查范围之前进行设置。

0
// 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; 
    } 
} 
相关问题