我有一个使用默认参数拍摄视频的程序,当我移动相机时,曝光、对焦和白平衡会自动调整。我想在程序中添加 2 个按钮:LOCK 和 PRESET。当按下 LOCK 按钮时,曝光、对焦和白平衡将被固定,它们的值将被存储为用户设置。 PRESET 按钮用于对相机进行用户设置,以确保我们可以拍摄具有相同曝光、对焦和白平衡值的所有视频。
锁定部分很简单,我只需要改变模式,所以我想知道是否有任何方法可以获取和设置曝光、对焦和白平衡的值。
以曝光为例,默认情况下,曝光模式设置为AVCaptureExposureModeContinuousAutoExposure,也就是说,当我手持iPhone拍摄视频时,曝光会自动调整,以确保我们在明亮或黑暗的情况下都能清楚地看到场景环境。
AVCaptureDevice* pCaptureDevice = [self videoDeviceWithPosition:AVCaptureDevicePositionBack];
[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
[pCaptureDevice unlockForConfiguration];
当按下 LOCK 按钮时,我将 exposureMode 更改为 AVCaptureExposureModeLocked,因此当前曝光值将不再更改。
[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice unlockForConfiguration];
但是,如何获取按下按钮那一刻的曝光值呢?更重要的是,如何在按下 PRESET 时将曝光值设置回 AVCaptureDevice。
我在论坛里搜索,只找到Michael Grinich 的帖子:Accessing iOS 6 new APIs for camera exposure and shutter speed .我按照他的发现并尝试使用私有(private) API 来获取和设置 exposureGain 和 exposureDuration,但我发现在 AVCaptureExposureModeContinuousAutoExposure 模式下,当我将相机从黑暗环境移动到明亮(exposureGain = 1.0 和曝光持续时间 = {1, 30, 1, 0})。设置它们根本不会改变曝光。
[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice setManualExposureSupportEnabled:YES];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice setExposureGain:3.0];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice unlockForConfiguration];
谁能帮我解决这个问题?非常感谢!
最佳答案
我在 Accessing iOS 6 new APIs for camera exposure and shutter speed 上添加了一个可能对您有帮助的答案.我可以在这里添加更多细节...
手动设置焦点与我概述的设置曝光的结构完全相同。即:
#define AVCaptureFocusModeManual 3
NSError* error = nil;
if ([captureDevice lockForConfiguration:&error]) {
captureDevice.manualFocusSupportEnabled = YES;
if ([captureDevice isFocusModeSupported:AVCaptureFocusModeManual]) {
captureDevice.focusMode = AVCaptureFocusModeManual;
// this is a value [0..1]
captureDevice.focusPosition = ...;
}
[captureDevice unlockForConfiguration];
}
白平衡似乎没有像曝光和对焦那样的特殊模式。不要将 WhiteBalanceMode 设置为锁定,否则似乎您可以设置色温:
// this is also a value [0..1]
captureDevice.whiteBalanceTemperature = ...;
关于ios - 如何指定视频录制的曝光、焦点和白平衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14425655/