2014-01-16 45 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; 
    } 
} 
相關問題