菜鸟教程小白 发表于 2022-12-13 10:09:53

ios - 如何更改前置摄像头的曝光?


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

<p>任何帮助将不胜感激!</p>

<pre><code>- (void) focusAtPoint:(CGPoint)point

{
AVCaptureDevice *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 () {
                NSError *error;

                ;

                CGPoint exposurePoint = point;
                ;
                ;
                ;
            }

      }
      else if(position == AVCaptureDevicePositionBack)
      {
         //code for focusing
      }

    }
}
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>它可以帮助你。</p>

<pre><code>override func touchesBegan(touches: Set&lt;UITouch&gt;, 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(&#34;Tap Location : X: \(location.x), Y: \(location.y)&#34;)

                if cameraManager.cameraDevice == .Front {
                  print(&#34;Front camera is used&#34;)

                  location.x = frameSize.width - location.x;
                }
                else {
                  print(&#34;Back camera is used&#34;)
                }

    //            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(&#34;POINT : X: \(x), Y: \(y)&#34;)

    //            let captureDevice = AVCaptureDevice.devices().first as? AVCaptureDevice

                let captureDevice = (AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! ).filter{$0.position == .Front}.first

                if let device = captureDevice {
                  do {
                        try device.lockForConfiguration()

                        let focusSupport:Bool = device.focusPointOfInterestSupported
                        let exposureSupport:Bool = device.exposurePointOfInterestSupported

                        print(&#34; AVCaptureFocusMode.AutoFocus:\(device.isFocusModeSupported(AVCaptureFocusMode.AutoFocus))&#34;)
                        print(&#34; AVCaptureFocusMode.ContinuousAutoFocus:\(device.isFocusModeSupported(AVCaptureFocusMode.ContinuousAutoFocus))&#34;)
                        print(&#34; AVCaptureFocusMode.Locked:\(device.isFocusModeSupported(AVCaptureFocusMode.Locked))&#34;)

                        print(&#34; AVCaptureExposureMode.AutoExpose:\(device.isExposureModeSupported(AVCaptureExposureMode.AutoExpose))&#34;)
                        print(&#34; AVCaptureExposureMode.ContinuousAutoExposure:\(device.isExposureModeSupported(AVCaptureExposureMode.ContinuousAutoExposure))&#34;)
                        print(&#34; AVCaptureExposureMode.Locked:\(device.isExposureModeSupported(AVCaptureExposureMode.Locked))&#34;)


                        if focusSupport{

                            print(&#34;focusPointOfInterestSupported: \(focusSupport)&#34;)

                            device.focusPointOfInterest = focusPoint

                            // device.focusMode = .ContinuousAutoFocus
                            device.focusMode = .AutoFocus
                            // device.focusMode = .Locked


                            print(&#34;Focus point was set successfully&#34;)
                        }
                        else{
                            print(&#34;focusPointOfInterestSupported is not supported: \(focusSupport)&#34;)
                        }


                        if exposureSupport {

                            print(&#34;exposurePointOfInterestSupported: \(exposureSupport)&#34;)

                            device.exposurePointOfInterest = focusPoint

                            device.exposureMode = AVCaptureExposureMode.ContinuousAutoExposure

                            print(&#34;Exposure point was set successfully&#34;)
                        }
                        else{
                            print(&#34;exposurePointOfInterestSupported is not supported: \(exposureSupport)&#34;)
                        }

                        device.unlockForConfiguration()

                  }
                  catch {
                        // just ignore
                        print(&#34;Focus point error&#34;)
                  }
                }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何更改前置摄像头的曝光?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32298450/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32298450/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何更改前置摄像头的曝光?