经过反复试验后,我意识到iPhone 6及更低版本上的前置摄像头不支持点击对焦。但是,有办法改变曝光率吗?我尝试了下面的代码,但没有任何反应。后置摄像头使用这种方法可以很好地对焦,但是当我切换到前摄像头时,什么也没有发生。 (我正在使用自定义相机)。
任何帮助,将不胜感激!
- (void) focusAtPoint:(CGPoint)point
{
AVCaptureDevice *device = [deviceInput device];
NSArray * inputs = session.inputs;
for (AVCaptureDeviceInput * INPUT in inputs) {
AVCaptureDevice * Device = INPUT.device ;
if ([ Device hasMediaType:AVMediaTypeVideo ]) {
AVCaptureDevicePosition position = Device.position;
if (position == AVCaptureDevicePositionFront)
{
//code for setting exposure
if ([device isExposureModeSupported:AVCaptureExposureModeContinuousAutoExposure]) {
NSError *error;
[device lockForConfiguration:&error];
CGPoint exposurePoint = point;
[device setExposurePointOfInterest:exposurePoint];
[device setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
[device unlockForConfiguration];
}
}
else if(position == AVCaptureDevicePositionBack)
{
//code for focusing
}
}
}
}
最佳答案
它可以帮助您。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let screenSize = cameraView.bounds.size
let frameSize:CGSize = view.frame.size
if let touchPoint = touches.first {
var location:CGPoint = touchPoint.locationInView(cameraView)
print("Tap Location : X: \(location.x), Y: \(location.y)")
if cameraManager.cameraDevice == .Front {
print("Front camera is used")
location.x = frameSize.width - location.x;
}
else {
print("Back camera is used")
}
// let x = location.y / frameSize.height
let x = location.x / frameSize.width
let y = 1.0 - (location.x / frameSize.width)
let focusPoint = CGPoint(x: x, y: y)
print("POINT : X: \(x), Y: \(y)")
// let captureDevice = AVCaptureDevice.devices().first as? AVCaptureDevice
let captureDevice = (AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! [AVCaptureDevice]).filter{$0.position == .Front}.first
if let device = captureDevice {
do {
try device.lockForConfiguration()
let focusSupport:Bool = device.focusPointOfInterestSupported
let exposureSupport:Bool = device.exposurePointOfInterestSupported
print(" AVCaptureFocusMode.AutoFocus: \(device.isFocusModeSupported(AVCaptureFocusMode.AutoFocus))")
print(" AVCaptureFocusMode.ContinuousAutoFocus: \(device.isFocusModeSupported(AVCaptureFocusMode.ContinuousAutoFocus))")
print(" AVCaptureFocusMode.Locked: \(device.isFocusModeSupported(AVCaptureFocusMode.Locked))")
print(" AVCaptureExposureMode.AutoExpose: \(device.isExposureModeSupported(AVCaptureExposureMode.AutoExpose))")
print(" AVCaptureExposureMode.ContinuousAutoExposure: \(device.isExposureModeSupported(AVCaptureExposureMode.ContinuousAutoExposure))")
print(" AVCaptureExposureMode.Locked: \(device.isExposureModeSupported(AVCaptureExposureMode.Locked))")
if focusSupport {
print("focusPointOfInterestSupported: \(focusSupport)")
device.focusPointOfInterest = focusPoint
// device.focusMode = .ContinuousAutoFocus
device.focusMode = .AutoFocus
// device.focusMode = .Locked
print("Focus point was set successfully")
}
else{
print("focusPointOfInterestSupported is not supported: \(focusSupport)")
}
if exposureSupport {
print("exposurePointOfInterestSupported: \(exposureSupport)")
device.exposurePointOfInterest = focusPoint
device.exposureMode = AVCaptureExposureMode.ContinuousAutoExposure
print("Exposure point was set successfully")
}
else{
print("exposurePointOfInterestSupported is not supported: \(exposureSupport)")
}
device.unlockForConfiguration()
}
catch {
// just ignore
print("Focus point error")
}
}
关于ios - 如何更改前置摄像头的曝光?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32298450/