OStack程序员社区-中国程序员成长平台

标题: ios - 如何更改前置摄像头的曝光? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 10:09
标题: ios - 如何更改前置摄像头的曝光?

经过反复试验,我意识到 iPhone 6 及以下机型的前置摄像头不支持点按对焦。但是有没有办法改变曝光?我已经尝试使用下面的代码,但没有任何反应。使用这种方法后置摄像头对焦很好,但是当我切换到前置摄像头时没有任何反应。 (我使用的是自定义相机)。

任何帮助将不胜感激!

- (void) focusAtPointCGPoint)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 
        }

    }
} 
}



Best Answer-推荐答案


它可以帮助你。

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("OINT : 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4