2014-02-06 2 views
2

Я играл с автофокусом и автоэкспозицией, AutoWhiteBalance и LowLightBoost, но все же могу получить изображения камеры так же яркими, как и просмотренные/снятые с помощью родной камеры iPhone 5.Как создать AVFoundation Camera Изображения, такие же яркие, как и на встроенной камере?

Не уверен, что я делаю неправильно. Ниже приведена основная функция, которая устанавливает функции автоматической камеры при нажатии экрана. Работа автофокуса. Но не уверен, что автоэкспозиция, баланс белого и LowLightBoost работают так же, как и предполагалось, потому что темные предметы не светятся, а также с родной камерой. Большая часть приведенного ниже кода взята из примера AVCam, размещенного на сайте Центра iosDev.

Заранее благодарен!

- (IBAction)focusAndExposeTap:(UIGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint devicePoint = [(AVCaptureVideoPreviewLayer *)[[self previewView] layer] captureDevicePointOfInterestForPoint:[gestureRecognizer locationInView:[gestureRecognizer view]]]; 
    [self focusWithMode:AVCaptureFocusModeAutoFocus exposeWithMode:AVCaptureExposureModeAutoExpose whiteBalanceWithMode:AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance atDevicePoint:devicePoint monitorSubjectAreaChange:YES]; 
} 

- (void)focusWithMode:(AVCaptureFocusMode)focusMode exposeWithMode:(AVCaptureExposureMode)exposureMode whiteBalanceWithMode:(AVCaptureWhiteBalanceMode)whiteBalanceMode atDevicePoint:(CGPoint)point monitorSubjectAreaChange:(BOOL)monitorSubjectAreaChange{ 
dispatch_async([self sessionQueue], ^{ 
    AVCaptureDevice *device = [[self videoDeviceInput] device]; 
    NSError *error = nil; 
    if ([device lockForConfiguration:&error]) 
    { 
     if ([device isFocusPointOfInterestSupported] && [device isFocusModeSupported:focusMode]) 
     { 
      [device setFocusMode:focusMode]; 
      [device setFocusPointOfInterest:point]; 
     } 
     NSLog(@"Pre-Exposure Mode Support?: %hhd", [device isExposurePointOfInterestSupported]); 
     if ([device isExposurePointOfInterestSupported] && [device isExposureModeSupported:exposureMode]) 
     { 
      [device setExposureMode:exposureMode]; 
      [device setExposurePointOfInterest:point]; 
     } 
     NSLog(@"Pre-White Balance mode Support? %hhd", [device isWhiteBalanceModeSupported:whiteBalanceMode]); 
     if ([device isWhiteBalanceModeSupported:whiteBalanceMode]) 
     { 
      [device setWhiteBalanceMode:whiteBalanceMode]; 
     } 
     NSLog(@"Pre Low light mode: %hhd", [device isLowLightBoostSupported]); 
     if ([device isLowLightBoostSupported]){ 
      [device setAutomaticallyEnablesLowLightBoostWhenAvailable:YES]; 
     } 
     [device setSubjectAreaChangeMonitoringEnabled:monitorSubjectAreaChange]; 
     [device unlockForConfiguration]; 
    } 
    else 
    { 
     NSLog(@"%@", error); 
    } 
}); 
} 
+0

вы смогли найти решение? – amone

ответ

0

Мое предположение лежит на вашем AVCaptureExposureMode. Как вы можете сослаться на мой поток here, iOS 7 в настоящее время не поддерживает AVCaptureExposureModeAutoExpose на любых устройствах. Следовательно, exposurePointOfInterest не будет установлен в нужную точку.

Ваша программа не будет даже ввести свой следующий фрагмент кода (вы можете проверить себя):

if ([device isExposurePointOfInterestSupported] && [device isExposureModeSupported:exposureMode]) 
     { 
      [device setExposureMode:exposureMode]; 
      [device setExposurePointOfInterest:point]; 
     } 

Если вы хотите, чтобы автоматически выставить функциональные возможности, что вы можете сделать, используя AVCaptureExposureModeContinuousAutoExpose установить экспозицию на определенная точка. Затем слушайте (значение ключа наблюдайте KVO) isAdjustingExposure свойство AVCaptureDevice, чтобы знать, когда экспозиция заканчивается. Как только это произойдет, установите для параметра Экспозиция значение AVCaptureExposureModeLocked.

Пожалуйста, дайте мне знать, если это не поможет, в противном случае вы можете принять и upvote этот ответ :)