如何改变前置摄像头的曝光?

时间:2015-08-30 15:57:41

标签: ios camera focus avfoundation

经过反复试验后,我意识到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 
        }

    }
} 
}

1 个答案:

答案 0 :(得分:1)

它可以帮助你。

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")
                    }
                }